變數欄位

變數欄位會將字串儲存為值,並將字串儲存為文字。值是變數的 ID,而文字則是變數的名稱。

變數欄位

標籤為「變數:」的方塊,以及選取「x」的下拉式欄位。

開啟編輯器的變數欄位

下拉式選單開啟時的相同方塊。選單包含「x」、「重新命名變數...」和「刪除『x』變數」項目

摺疊區塊中的變數欄位

收合後的相同區塊。標籤為「variable: x」,右側邊緣呈鋸齒狀,表示已摺疊。

創作

未輸入

JSON

{
  "type": "example_variable_untyped",
  "message0": "variable: %1",
  "args0": [
    {
      "type": "field_variable",
      "name": "FIELDNAME",
      "variable": "x"
    }
  ]
}

JavaScript

Blockly.Blocks['example_variable_untyped'] = {
  init: function() {
    this.appendDummyInput()
        .appendField('variable:')
        .appendField(new Blockly.FieldVariable('x'), 'FIELDNAME');
  }
};

已輸入

JSON

{
  "type": "example_variable_typed",
  "message0": "variable: %1",
  "args0": [
    {
      "type": "field_variable",
      "name": "FIELDNAME",
      "variable": "x",
      "variableTypes": ["Number", "String"],
      "defaultType": "Number"
    }
  ]
}

JavaScript

Blockly.Blocks['example_variable_typed'] = {
  init: function() {
    this.appendDummyInput()
      .appendField('variable:')
      .appendField(new Blockly.FieldVariable(
          'X',
          null,
          ['Number', 'String'],
          'Number'
      ), 'FIELDNAME');
  }
};

變數建構函式會接收選用的變數名稱、選用的驗證器、選用的變數型別陣列,以及選用的預設型別。

  • 變數名稱應為字串。這是欄位所含初始變數的名稱。如果為空值或未定義,系統會產生專屬名稱。
  • 變數類型應為字串陣列。這會告知欄位可保留哪些類型的變數 (也就是要新增至下拉式選單的變數類型)。如果為空值或未定義,系統會接受所有變數類型 (並新增至下拉式選單)。
  • 預設類型應為字串。建立欄位的初始變數模型時,系統會使用這項資訊。如果已定義,則應納入變數類型陣列。如果這個值為空值或未定義,則預設為空字串,表示初始變數會是彈性型別。

→ 如要進一步瞭解嚴格型別,請參閱型別檢查

序列化

JSON

變數欄位的 JSON 如下所示:

{
  "fields": {
    "FIELDNAME": {
      "id": "QJD^+@[RVIwbLSZoDb:V"
    }
  }
}

其中 FIELDNAME 是參照變數欄位的字串,而值是欄位參照的變數 ID。

如果您在工具箱中使用這個欄位,也可以直接指定名稱和 (選用) 型別,因為沒有可供參照的變數。

{
  "fields": {
    "FIELDNAME": {
      "name": "my_variable",
      "type": "string"
    }
  }
}

XML

變數欄位的 XML 如下所示:

<field name="VARIABLE" id="QJD^+@[RVIwbLSZoDb:V" variabletype="">name</field>
  • 節點的 name 屬性包含參照變數欄位的字串。
  • 節點的 id 屬性包含欄位參照的變數 ID。
  • 節點的 variabletype 屬性包含變數類型。 variabletype 遵循與建構函式預設型別參數相同的規則。
  • 節點的內部文字是變數名稱。內文值遵循的規則與建構函式的變數名稱參數相同。

建立變數驗證器

變數欄位的值是字串,因此任何驗證器都必須接受字串,並傳回字串、nullundefined

以下是驗證器的範例,只接受部分預先定義的變數做為選項。工作區載入時,這些變數需要使用 Workspace.getVariableMap().createVariable 函式定義。

function(newValue) {
  var validIds = ['Worf', 'Riker', 'Picard'];
  if (validIds.indexOf(newValue) == -1) {
    return null;
  }
  return newValue;
}

GIF 動畫:顯示驗證函式運作情形。從下拉式選單選擇「Picard」或「Riker」時,下拉式選單會設為該選項。選擇「x」時,下拉式選單會設為先前的選項「Riker」。