title: JavaScript Blockly.FieldDropdown parameters
body: <p>I'm doing a project with <a href="https://developers.google.com/blockly/" rel="nofollow noreferrer"><strong>blockly</strong></a> which is a javascript library, i can't understand what type of parameters does the menuGenerator variable of the <strong>Blockly.FieldDropdown</strong> function accept.
  Here you can see the bit of code interested:</p>
  
  <pre><code>/**
  * Class for an editable dropdown field.
  * @param {(!Array.&lt;!Array&gt;|!Function)} menuGenerator An array of options
  *     for a dropdown list, or a function which generates these options.
  * @param {Function=} opt_validator A function that is executed when a new
  *     option is selected, with the newly selected value as i ts sole 
  argument.
  *     If it returns a value, that value (which must be one of the options) 
  will
  *     become selected in place of the newly selected option, unless the 
  return
  *     value is null, in which case the change is aborted.
  * @extends {Blockly.Field}
  * @constructor
  */
  Blockly.FieldDropdown = function(menuGenerator, opt_validator) {
  </code></pre>
  
  <p>i can't understand what does <em>@param {(!Array.|!Function)}</em> mean</p>