變數欄位

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

變數欄位

開啟編輯器的變數欄位

收合區塊中的變數欄位

創作

未類型

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.createVariable 函式。

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