NarraLeaf

数据

常量、类型转换、类型判断,以及构成一张图所需的全部字符串、数组、对象和 JSON 操作

Data 承载蓝图参与运算的值。需要一个常量、值的类型不对,或者要拆解字符串、数组、JSON 文档时,都用它。这里几乎没有节点带执行引脚——Data 节点由连到它输出端的一方读取。Memo 是唯一的例外,它在本页末尾自己解释

值类型

下面的引脚上一共出现十种valueType

valueType内容产出方
string文本String,以及所有字符串节点
integer整数Integer,以及各类长度、下标、计数
float数字FloatTo FloatParse Float
boolean真或假Boolean,以及所有类型判断和字符串判断
json任意 JSON 值:object、array、string、number、boolean 或nullJSONParse JSONGet JSON FieldMake Object
arrayJSON 数组,但作为独立类型存在Make Array、返回数组的那些Array …节点、Object KeysObject Values
any任意值MemoGet Item Field,以及形状随卡片选择而定的那些属性读取
RGBAColor{ r, g, b, a }Color
Vector2D{ x, y }Vector2DMake Vector2DRect CenterGet Center
Rect{ x, y, width, height }RectMake RectGet BoundsGet Measured Rect

两个数据引脚之间的连线,在类型完全相同时成立;此外还有以下几种:

来源目标原因
integerfloat整数一定是浮点数
integerfloatstring读取该输入时数字会被转成文本。这是唯一会改写值的隐式转换——其余允许的连线都原样传递
arrayjson数组本身就是一个 JSON 值
Rectjson一条为旧图留的兼容口子,而不是关于结构化类型的规则——见下
any任意类型any在两个方向上都匹配
任意类型any

其它分类的类型也只在同样的地方放宽:element能接到任意element:nl.…引脚上、也能反过来;ImageAssetstring都能接进ImageAsset|null输入

其余一律拒绝,包括那些作者以为能反过来用的:

  • jsonarrayjsonRect 每一条放宽规则都只单向成立。一个任意对象并不是一个矩形
  • floatinteger 插一个To Integer,它向零截断
  • stringintegerfloatParse IntParse FloatTo IntegerTo Float
  • booleanstringjsonstring 只有数字会隐式转成文本。插To StringStringify JSON
  • stringintegerfloatbooleanjson 只有arrayRect能隐式接进json输入。插To JSON
  • RGBAColorjsonVector2Djson 它们是各自独立的结构化类型,不是 JSON 文档。要拆开就用Break Vector2D,要造文档就用Make Object

Rectjson 是给 Rect 成为独立类型之前写下的图留的。那时 Rect 常量和 Get Bounds 发布的都是 json,所以当年写下的矩形至今仍能接进 Get JSON Field 并继续工作。Vector2D 从来就不是 json 引脚,因此保持窄口

array能接进json输入,反过来永远不行。一个恰好装着数组的json值——Split的结果、Parse JSONGet JSON Field——不能接到Array Length或 List 的Set Items这类array输入上。Flow里的For Eachjson,所以遍历仍然可行;Array …节点则不行

约定

  • 这里除一个之外都是纯节点。 没有执行引脚可连,所以 Data 节点不可能落在执行线路上。它的输出在下游读取时才计算,下一次读取时重新计算。Memo 是例外:它是执行节点,因为把一个值按住不动恰恰是纯节点做不到的事
  • 三种图类型都接受它们——eventfunctionmacro——Blueprint Value 图同样接受。仍然要排除 Memo:它只支持 eventmacro
  • 不存在原地修改。 写入类节点在输出引脚上给出一个新值,输入原封不动
  • 只有stringintegerfloatboolean引脚支持卡片内联输入。 jsonarray输入没有卡片编辑器,请接一个JSON常量或Make Object / Make Array节点
  • 输入未连线不算错误。 它读取该引脚的卡片内联值,没有内联值时读到空;各节点自行归一:缺失的数组读作空数组,缺失的字符串读作"",缺失的数字读作0
  • 一条纯节点链最多解析 32 层。 超过之后读取静默地什么都取不到

Array PushSet JSON FieldObject Set Field,以及本页所有写入类节点,交给你的都是一个值,输入保持不动。只把Get Var → Array Push连起来什么也不会发生——你必须把结果再连回Set Var。参见 变量

常量

常量节点有一个输出引脚和一个卡片字段。类型由你选的节点固定下来,图的其余部分才因此能做类型检查

String

blueprint.data.stringLiteral · Pure

String(字符串)常量

引脚方向类型说明
valueout · datastring

卡片字段

字段含义
value文本内容

Integer

blueprint.data.integerLiteral · Pure

Integer(整数)常量

引脚方向类型说明
valueout · datainteger

卡片字段

字段含义
value一个数字。读取时截断为整数

Float

blueprint.data.floatLiteral · Pure

Float(浮点数)常量

引脚方向类型说明
valueout · datafloat

卡片字段

字段含义
value一个数字。非有限值读作0

Boolean

blueprint.data.booleanLiteral · Pure

Boolean(布尔值)常量

引脚方向类型说明
valueout · databoolean

卡片字段

字段含义
valueTrue / False 下拉框

Null

blueprint.data.nullLiteral · Pure

Null(空值)是唯一没有卡片字段的常量——null没有什么可配置的。它的输出类型是json,因此能接到任何jsonany输入

引脚方向类型说明
valueout · datajson恒为null

JSON

blueprint.data.jsonLiteral · Pure

卡片显示根类型和摘要;编辑时打开树形表单,object 用命名字段,array 用顺序条目。新建节点是一个空 object

引脚方向类型说明
valueout · datajson

卡片字段

字段含义
value以树形方式编辑的文档。写入的一切都是 JSON-safe 值

Color

blueprint.data.colorLiteral · Pure

Color(颜色)用颜色选择器编辑,并以 8 位 RGBA hex 显示。输出永远是归一化后的{ r, g, b, a }记录——rgb为字节,a取值01

引脚方向类型说明
valueout · dataRGBAColor

卡片字段

字段含义
value颜色选择器

Vector2D

blueprint.data.vector2dLiteral · Pure

Vector2D(二维向量)常量

引脚方向类型说明
valueout · dataVector2D

卡片字段

字段含义
value固定的x / y数值 schema。额外字段会被拒绝;缺失或非数字的字段读作0

Rect

blueprint.data.rectLiteral · Pure

ColorVector2D一样,Rect(矩形)是一个独立类型。与它们不同的是,它还能放宽成json,因此仍能接到任何json输入——理由见本页开头“值类型”一节

引脚方向类型说明
valueout · dataRect

卡片字段

字段含义
value固定的x / y / width / height数值 schema,校验规则与Vector2D相同

Number

blueprint.data.numberLiteral · Pure

Number(数字)是旧版数字常量,已从创建浮窗隐藏,无法加进新图。它仍然注册着,好让旧图继续解析。请用Float

引脚方向类型说明
valueout · datafloat

卡片字段

字段含义
value一个数字

Literal

blueprint.data.literal · Pure

Literal(字面量)是旧版无类型常量,同样从创建浮窗隐藏。它的any输出能通过任何类型检查——这恰恰是它被那些带类型的常量取代的原因

引脚方向类型说明
valueout · dataany

卡片字段

字段含义
value一个无类型的值

转换

连接规则会把你引向这几个节点。它们都不会失败:读不出来的输入产出该类型的零值,而不是报错

To String

blueprint.string.toString · Pure

To String(转为字符串):null和未连线的输入都读作""。object 和 array 会被序列化为 JSON 文本

引脚方向类型说明
valuein · dataany
resultout · datastring

To Integer

blueprint.data.toInteger · Pure

To Integer(转为整数)向零截断——-2.7得到-2而不是-3true读作1false读作0,数字字符串可以接受,其余一律得到0

引脚方向类型说明
valuein · dataany
resultout · datainteger

To Float

blueprint.data.toFloat · Pure

接受范围与To Integer相同,只是不截断。非有限数字得到0

引脚方向类型说明
valuein · dataany
resultout · datafloat

To Boolean

blueprint.data.toBoolean · Pure

字符串在去除首尾空白并转小写后匹配:"""false""0""no"为假;"true""1""yes"为真;其他非空字符串一律为真。0和非有限数字为假

引脚方向类型说明
valuein · dataany
resultout · databoolean

To JSON

blueprint.data.toJson · Pure

字符串会尝试按 JSON 解析,解析不了就保留原字符串——所以这个节点绝不会毁掉文本。其他值会被转成 JSON-safe 值:非有限数字和循环引用变成null,函数和 symbol 变成它们的文本形式

引脚方向类型说明
valuein · dataany
resultout · datajson

Parse Int

blueprint.data.parseInt · Pure

固定十进制,取开头的数字——"12px"得到12。一个数字都没有则得到0

引脚方向类型说明
valuein · datastring可在卡片上内联输入
resultout · datainteger

Parse Float

blueprint.data.parseFloat · Pure

Parse Float(解析浮点数)

引脚方向类型说明
valuein · datastring可在卡片上内联输入
resultout · datafloat

Parse JSON

blueprint.data.parseJson · Pure

严格解析:解析不了的文本和空字符串都得到null。想保留原文本时改用To JSON

引脚方向类型说明
valuein · datastring可在卡片上内联输入
resultout · datajson

Stringify JSON

blueprint.data.stringifyJson · Pure

未连线的输入得到文本"null"。无法序列化的值得到""

引脚方向类型说明
valuein · datajson
resultout · datastring

类型判断

每个都接收any,回答关于实际到达的那个值的一个问题——这就是你弄清jsonany引脚里究竟装着什么的办法

Is String

blueprint.data.isString · Pure

Is String(是否为字符串)

引脚方向类型说明
valuein · dataany
resultout · databoolean

Is Number

blueprint.data.isNumber · Pure

只认有限数字——NaN和无穷都为假,数字字符串也为假。它问的是类型,不是能不能解析

引脚方向类型说明
valuein · dataany
resultout · databoolean

Is Boolean

blueprint.data.isBoolean · Pure

Is Boolean(是否为布尔值)

引脚方向类型说明
valuein · dataany
resultout · databoolean

Is Array

blueprint.data.isArray · Pure

Is Array(是否为数组)

引脚方向类型说明
valuein · dataany
resultout · databoolean

Is Object

blueprint.data.isObject · Pure

非 null 且不是数组的 object 才为真。数组归Is Array回答,不归它

引脚方向类型说明
valuein · dataany
resultout · databoolean

Is Null

blueprint.data.isNull · Pure

null为真,对解析不出结果的输入也为真——未连线的引脚在这里读作 null

引脚方向类型说明
valuein · dataany
resultout · databoolean

Not Null

blueprint.data.notNull · Pure

Is Null的取反,省得你再挂一个Not

引脚方向类型说明
valuein · dataany
resultout · databoolean

Is Empty Value

blueprint.data.isEmptyValue · Pure

null""、空数组和空 object 为真。0false是值而不是空,两者都为假

引脚方向类型说明
valuein · dataany
resultout · databoolean

字符串

这里每个value输入都能在卡片上内联输入,所以一次性的字符串不必单独放一个常量节点。下标从 0 开始,越界的下标会被夹取而不是拒绝

Concat

blueprint.string.concat · Pure

Concat(拼接)按引脚顺序把输入首尾相接,中间不加任何内容。卡片上有添加输入的控件:在ab之外可以继续追加string输入,下面的签名只列出它初始自带的两个

引脚方向类型说明
ain · datastring可在卡片上内联输入
bin · datastring可在卡片上内联输入
resultout · datastring

Format

blueprint.string.format · Pure

把模板中的{name}替换为values里的同名字段;values是数组时用{0}{1}……。匹配不到的占位符变成空;values既不是 object 也不是 array 时,所有占位符都变成空

引脚方向类型说明
templatein · datastring可在卡片上内联输入
valuesin · datajson接一个JSON常量或Make Object
resultout · datastring

Length

blueprint.string.length · Pure

Length(长度)

引脚方向类型说明
valuein · datastring可在卡片上内联输入
lengthout · datainteger

Is Empty

blueprint.string.isEmpty · Pure

长度为 0。全是空格的字符串不算空——那是Is Blank

引脚方向类型说明
valuein · datastring可在卡片上内联输入
resultout · databoolean

Is Blank

blueprint.string.isBlank · Pure

为空,或只包含空白字符

引脚方向类型说明
valuein · datastring可在卡片上内联输入
resultout · databoolean

Trim

blueprint.string.trim · Pure

Trim(去除首尾空白)

引脚方向类型说明
valuein · datastring可在卡片上内联输入
resultout · datastring

Trim Start

blueprint.string.trimStart · Pure

Trim Start(去除首部空白)

引脚方向类型说明
valuein · datastring可在卡片上内联输入
resultout · datastring

Trim End

blueprint.string.trimEnd · Pure

Trim End(去除尾部空白)

引脚方向类型说明
valuein · datastring可在卡片上内联输入
resultout · datastring

To Upper Case

blueprint.string.toUpperCase · Pure

To Upper Case(转为大写)

引脚方向类型说明
valuein · datastring可在卡片上内联输入
resultout · datastring

To Lower Case

blueprint.string.toLowerCase · Pure

To Lower Case(转为小写)

引脚方向类型说明
valuein · datastring可在卡片上内联输入
resultout · datastring

Capitalize

blueprint.string.capitalize · Pure

只把第一个字符转成大写,其余原样保留——这不是标题式大小写

引脚方向类型说明
valuein · datastring可在卡片上内联输入
resultout · datastring

Equals

blueprint.string.equals · Pure

Equals(相等)

引脚方向类型说明
ain · datastring可在卡片上内联输入
bin · datastring可在卡片上内联输入
resultout · databoolean

Equals Ignore Case

blueprint.string.equalsIgnoreCase · Pure

Equals Ignore Case(相等,忽略大小写)

引脚方向类型说明
ain · datastring可在卡片上内联输入
bin · datastring可在卡片上内联输入
resultout · databoolean

Contains

blueprint.string.contains · Pure

Contains(包含)

引脚方向类型说明
valuein · datastring可在卡片上内联输入
searchin · datastring可在卡片上内联输入
resultout · databoolean

Starts With

blueprint.string.startsWith · Pure

Starts With(以……开头)

引脚方向类型说明
valuein · datastring可在卡片上内联输入
searchin · datastring可在卡片上内联输入
resultout · databoolean

Ends With

blueprint.string.endsWith · Pure

Ends With(以……结尾)

引脚方向类型说明
valuein · datastring可在卡片上内联输入
searchin · datastring可在卡片上内联输入
resultout · databoolean

Index Of

blueprint.string.indexOf · Pure

start向后查找,找不到给出-1start会被夹进字符串范围,所以越界的值只是从头或从尾开始找,而不会失败

引脚方向类型说明
valuein · datastring可在卡片上内联输入
searchin · datastring可在卡片上内联输入
startin · datainteger可在卡片上内联输入。默认为0
indexout · datainteger

Last Index Of

blueprint.string.lastIndexOf · Pure

从末尾向前查找。没有start引脚——这是它与Index Of唯一不对称的地方

引脚方向类型说明
valuein · datastring可在卡片上内联输入
searchin · datastring可在卡片上内联输入
indexout · datainteger

Count

blueprint.string.count · Pure

统计不重叠的出现次数。search为空时给出0,而不是字符串长度

引脚方向类型说明
valuein · datastring可在卡片上内联输入
searchin · datastring可在卡片上内联输入
countout · datainteger

Char At

blueprint.string.charAt · Pure

下标落在字符串之外时给出"",而不是报错

引脚方向类型说明
valuein · datastring可在卡片上内联输入
indexin · datainteger可在卡片上内联输入
charout · datastring

Substring

blueprint.string.substring · Pure

第二个引脚是长度,不是结束下标。两者都会被夹进字符串范围;length未连线时取从start起的全部剩余内容

引脚方向类型说明
valuein · datastring可在卡片上内联输入
startin · datainteger可在卡片上内联输入
lengthin · datainteger可在卡片上内联输入
resultout · datastring

Insert

blueprint.string.insert · Pure

index会被夹进字符串范围;读不出下标时追加到末尾

引脚方向类型说明
valuein · datastring可在卡片上内联输入
indexin · datainteger可在卡片上内联输入
insertin · datastring可在卡片上内联输入
resultout · datastring

Replace

blueprint.string.replace · Pure

只替换第一处。search为空时原样返回,而不是在每个位置插入

引脚方向类型说明
valuein · datastring可在卡片上内联输入
searchin · datastring可在卡片上内联输入
replacementin · datastring可在卡片上内联输入
resultout · datastring

Replace All

blueprint.string.replaceAll · Pure

替换全部。search是纯文本而不是正则;同样,search为空时原样返回

引脚方向类型说明
valuein · datastring可在卡片上内联输入
searchin · datastring可在卡片上内联输入
replacementin · datastring可在卡片上内联输入
resultout · datastring

Repeat

blueprint.string.repeat · Pure

count被夹到010000,所以失控的数字不会撑出一个无界的字符串

引脚方向类型说明
valuein · datastring可在卡片上内联输入
countin · datainteger可在卡片上内联输入
resultout · datastring

Pad Start

blueprint.string.padStart · Pure

length是补齐后的目标总长度,不是要补的字符数。已经够长的字符串原样返回

引脚方向类型说明
valuein · datastring可在卡片上内联输入
lengthin · datainteger可在卡片上内联输入
padin · datastring可在卡片上内联输入
resultout · datastring

Pad End

blueprint.string.padEnd · Pure

Pad End(尾部填充)

引脚方向类型说明
valuein · datastring可在卡片上内联输入
lengthin · datainteger可在卡片上内联输入
padin · datastring可在卡片上内联输入
resultout · datastring

Split

blueprint.string.split · Pure

结果的类型是json而不是array,所以它能接到JoinFor Each和任何其他json输入——但接不到Array …节点

引脚方向类型说明
valuein · datastring可在卡片上内联输入
separatorin · datastring可在卡片上内联输入
resultout · datajson

Join

blueprint.string.join · Pure

它收json,而Array Joinarrayvalues不是数组时给出""

引脚方向类型说明
valuesin · datajson
separatorin · datastring可在卡片上内联输入
resultout · datastring

Matches Regex

blueprint.string.matchesRegex · Pure

pattern是正则表达式本体,不带分隔符也不带 flag。编译不了的表达式给出false,而不是抛错

引脚方向类型说明
valuein · datastring可在卡片上内联输入
patternin · datastring可在卡片上内联输入
resultout · databoolean

Extract Regex

blueprint.string.extractRegex · Pure

表达式带捕获组时返回第一个捕获组,否则返回整段匹配。没有匹配,或表达式编译不了,都给出""

引脚方向类型说明
valuein · datastring可在卡片上内联输入
patternin · datastring可在卡片上内联输入
resultout · datastring

Normalize Line Breaks

blueprint.string.normalizeLineBreaks · Pure

\r\n和单独的\r改写为\n,这样来自任何平台的文本在比较和分割时表现一致

引脚方向类型说明
valuein · datastring可在卡片上内联输入
resultout · datastring

数组

这里每个节点都把array输入当数组读,不是数组时替换为空数组,所以不会抛错。每个写入类节点都在result上返回一个新数组

Array Length

blueprint.collection.arrayLength · Pure

Array Length(数组长度)

引脚方向类型说明
arrayin · dataarray
lengthout · datainteger

Array Get

blueprint.collection.arrayGet · Pure

下标为负或越过末尾时给出null。输出类型是json,因为数组的一项可以是任何 JSON 值

引脚方向类型说明
arrayin · dataarray
indexin · datainteger可在卡片上内联输入
itemout · datajson

Array Set

blueprint.collection.arraySet · Pure

index处写入并返回新数组。下标为负或大于10000时原样返回输入;下标越过末尾会把数组撑长,中间跳过的位置留空

引脚方向类型说明
arrayin · dataarray
indexin · datainteger可在卡片上内联输入
itemin · dataany
resultout · dataarray

Array Push

blueprint.collection.arrayPush · Pure

追加到末尾

引脚方向类型说明
arrayin · dataarray
itemin · dataany
resultout · dataarray

Array Insert

blueprint.collection.arrayInsert · Pure

index被夹到0–长度之间,所以越界的下标只会变成追加,而不会失败

引脚方向类型说明
arrayin · dataarray
indexin · datainteger可在卡片上内联输入
itemin · dataany
resultout · dataarray

Array Remove

blueprint.collection.arrayRemove · Pure

移除第一个与item相等的项,按 JSON 值比较——两个字段相同的 object 会判定为相等,尽管它们并非同一个对象。没有匹配时原样返回输入

引脚方向类型说明
arrayin · dataarray
itemin · dataany
resultout · dataarray

Array Remove At

blueprint.collection.arrayRemoveAt · Pure

移除一项并把后面的补上。下标越界时原样返回输入

引脚方向类型说明
arrayin · dataarray
indexin · datainteger可在卡片上内联输入
resultout · dataarray

Array Contains

blueprint.collection.arrayContains · Pure

按 JSON 值相等判断,与Array Remove同一套规则。这比 Math 里按同一性比较的Equal故意放宽了一层

引脚方向类型说明
arrayin · dataarray
itemin · dataany
resultout · databoolean

Array Slice

blueprint.collection.arraySlice · Pure

end不含在内。两端都被夹进数组范围;end未连线时一直取到末尾

引脚方向类型说明
arrayin · dataarray
startin · datainteger可在卡片上内联输入
endin · datainteger可在卡片上内联输入
resultout · dataarray

Array Join

blueprint.collection.arrayJoin · Pure

把每一项转成文本——object 和 array 转成 JSON——再连接起来。它收array,而字符串的Joinjson

引脚方向类型说明
arrayin · dataarray
separatorin · datastring可在卡片上内联输入
resultout · datastring

Array First

blueprint.collection.arrayFirst · Pure

引脚方向类型说明
arrayin · dataarray
itemout · datajson空数组时为 null

Array Last

blueprint.collection.arrayLast · Pure

引脚方向类型说明
arrayin · dataarray
itemout · datajson空数组时为 null

Array Is Empty

blueprint.collection.arrayIsEmpty · Pure

引脚方向类型说明
arrayin · dataarray
resultout · databoolean

Array Index Of

blueprint.collection.arrayIndexOf · Pure

第一个与 item 相等的项的位置,按值比较,与 Array Contains 用的是同一套。没有命中时为 -1

引脚方向类型说明
arrayin · dataarray
itemin · dataany
indexout · datainteger

Array Concat

blueprint.collection.arrayConcat · Pure

a 接上 b,返回一个新数组

引脚方向类型说明
ain · dataarray
bin · dataarray
resultout · dataarray

Array Reverse

blueprint.collection.arrayReverse · Pure

引脚方向类型说明
arrayin · dataarray
resultout · dataarray

Array Unique

blueprint.collection.arrayUnique · Pure

丢掉后出现的重复项,保留每一种的第一个。按值比较,所以字段相同的两个对象算作同一项

引脚方向类型说明
arrayin · dataarray
resultout · dataarray

Array Range

blueprint.collection.arrayRange · Pure

start 开始的 count 个数字,每个比前一个多 step。当一页要画 N 个东西、而那些数字本身就是内容时,需要的就是这个数组

引脚方向类型说明
startin · datainteger可填字面量。默认 0
countin · datainteger可填字面量。会被夹到 0 及以上
stepin · datainteger可填字面量。默认 1step0 时按 1 读——否则那会是 countstart,一个披着 range 外形却永远不前进的循环
resultout · dataarray

Array Find By Key

blueprint.collection.arrayFind · Pure

第一个 key 字段等于 value 的项,以及它在哪里

引脚方向类型说明
arrayin · dataarray
keyin · datastring字段名。可填字面量
valuein · dataany
itemout · datajson没有命中时为 null
indexout · datainteger没有命中时为 -1

Array Filter By Key

blueprint.collection.arrayFilter · Pure

所有 key 字段等于 value 的项,保持原有顺序

引脚方向类型说明
arrayin · dataarray
keyin · datastring可填字面量
valuein · dataany
resultout · dataarray

Array Sort By Key

blueprint.collection.arraySort · Pure

按记录的某个字段排序。这三个按键节点收的是字段名而不是比较函数,因为比较函数是一个函数值,而按记录的某个字段排序才是列表真正需要的东西。

数字按数字比,布尔按 false 在前、true 在后比,其余按文本比,用运行时排列字符串的那套次序。字段缺失、为 null 或为 "" 的项在两个方向上都排到最后,相持时保持原有先后。key 为空时原样返回

引脚方向类型说明
arrayin · dataarray
keyin · datastring可填字面量
descendingin · databoolean可填字面量
resultout · dataarray

JSON Array Length

blueprint.data.jsonArrayLength · Pure

Array Length的旧名字,保留下来让已有的图继续解析。输入不是数组时给出0。新图请用Array Length

引脚方向类型说明
valuein · dataarray
lengthout · datainteger

几何

Vector2DRect 是结构化类型而不是 JSON 文档,因此要用它们自己的节点来构造和拆解,而不是 Get JSON Field。每个输入收到非数字都读作 0

Make Vector2D

blueprint.data.makeVector2d · Pure

引脚方向类型说明
xin · datafloat可填字面量
yin · datafloat可填字面量
valueout · dataVector2D

Vector2D 常量不同,两个分量都可以连线——当那个点是算出来的时候,Move Mouse To 要的就是这个

Break Vector2D

blueprint.data.breakVector2d · Pure

引脚方向类型说明
valuein · dataVector2D
xout · datafloat
yout · datafloat

Make Rect

blueprint.data.makeRect · Pure

引脚方向类型说明
xin · datafloat可填字面量
yin · datafloat可填字面量
widthin · datafloat可填字面量
heightin · datafloat可填字面量
valueout · dataRect

负的 widthheight 会被归一而不是保留:原点移过去、边长取正,于是你拿到的就是你画出来的那个矩形

Break Rect

blueprint.data.breakRect · Pure

引脚方向类型说明
valuein · dataRect
xout · datafloat
yout · datafloat
widthout · datafloat
heightout · datafloat

Rect Center

blueprint.data.rectCenter · Pure

到矩形四条边等距的那个点

引脚方向类型说明
valuein · dataRect
centerout · dataVector2D

对象

这几个节点一次按名字处理一个字段。它们不接受路径——嵌套写入请用Set JSON Field。不是 object 的输入按{}读取

Object Keys

blueprint.collection.objectKeys · Pure

按插入顺序给出字段名。数组或其他任何非 object 都给出空数组

引脚方向类型说明
objectin · datajson
resultout · dataarray

Object Values

blueprint.collection.objectValues · Pure

Object Values(对象值)

引脚方向类型说明
objectin · datajson
resultout · dataarray

Object Set Field

blueprint.collection.objectSetField · Pure

field是一个纯粹的名字,其中的点是名字的一部分而不是路径分隔。名字为空时原样返回那份副本

引脚方向类型说明
objectin · datajson
fieldin · datastring可在卡片上内联输入
valuein · dataany
resultout · datajson

Object Remove Field

blueprint.collection.objectRemoveField · Pure

Object Remove Field(对象移除字段)

引脚方向类型说明
objectin · datajson
fieldin · datastring可在卡片上内联输入
resultout · datajson

Object Merge

blueprint.collection.objectMerge · Pure

浅合并;同名字段以b为准。嵌套 object 是整体替换而不是继续合并。Merge JSON Object是同一个操作的另一个类型 id

引脚方向类型说明
ain · datajson
bin · datajson
resultout · datajson

JSON

路径类节点用点标记定位文档:user.profile.name,数组下标用数字段,items.0。键名里的字面点用\.转义。空路径表示整个文档,所以不填路径的Set JSON Field会把文档整体替换掉

Get JSON Field

blueprint.data.jsonGet · Pure

路径不存在时给出null,所以「字段缺失」和「字段的值就是null」读出来一模一样。这两者需要区分时用Has JSON Field

引脚方向类型说明
jsonin · datajson
pathin · datastring可在卡片上内联输入
resultout · datajson

Has JSON Field

blueprint.data.jsonHas · Pure

判断的是存在性而不是真值:值为null的字段依然存在

引脚方向类型说明
jsonin · datajson
pathin · datastring可在卡片上内联输入
resultout · databoolean

Set JSON Field

blueprint.data.jsonSet · Pure

复制输入,然后写进这份副本。路径上缺失的容器会被创建——下一段是数字就建数组,否则建 object——所以往一个空文档里写stats.hp会得到{ "stats": { "hp": … } }

引脚方向类型说明
jsonin · datajson
pathin · datastring可在卡片上内联输入
valuein · dataany以 JSON-safe 形式写入
resultout · datajson

Remove JSON Field

blueprint.data.jsonRemove · Pure

删除 object 字段,或把数组条目整个抽掉、后面的项依次前移。路径不存在时原样给回那份副本

引脚方向类型说明
jsonin · datajson
pathin · datastring可在卡片上内联输入
resultout · datajson

Make Object

blueprint.data.jsonMakeObject · Pure

由动态引脚对构造 object,所以下面的签名只有输出。卡片上每加一个字段就生成一个Name输入(string,可在卡片上内联输入)和一个Value输入(any);新建节点自带一对。字段名在运行时读取,因此接线的Name可以算出键名。名字为空、或与前面重复的字段会被跳过

引脚方向类型说明
resultout · datajson

Make Array

blueprint.data.jsonMakeArray · Pure

按引脚顺序由动态Item输入构造数组,所以下面的签名只有输出。新建节点一个都没有——在卡片上添加。它是产出array类型的那个节点,因此也是把构造好的数组交给Array Length或 List 的Set Items的办法

引脚方向类型说明
resultout · dataarray

Merge JSON Object

blueprint.data.jsonMergeObject · Pure

浅合并、b为准,与Object Merge完全一致。非 object 的输入按{}处理

引脚方向类型说明
ain · datajson
bin · datajson
resultout · datajson

Clone JSON

blueprint.data.jsonClone · Pure

一份 JSON-safe 深拷贝。写入类节点本来就会复制输入,所以只有当你要把同一份文档交给两条互不应看见对方修改的分支时才需要它

引脚方向类型说明
valuein · datajson
resultout · datajson

把一个值按住

Memo

blueprint.data.memo

执行经过它时读一次输入,把那个值留在输出上,直到执行下一次经过。

它是整份目录里唯一一个可以喂给多个下游的数据输出。其余全都是单消费者,而且是两个不同的理由:纯节点每次被读都会重新求值,一个 Random Float 接到三个引脚上就是三个数字;执行节点的输出则属于产生它的那一次脉冲。Memo 只有一个写入方——它自己——所以每次读到的都是那次写入留下的东西,扇出去也不会让任何人意外。

引脚方向类型说明
inin · exec
nextout · exec
valuein · dataany执行经过时读一次
resultout · dataany卡片上标作 Value

它是同步的而不是 latent,这是刻意的:这里没有什么可等的,而 latent 节点会被内联故事值挡在门外。function 图保持纯净,所以 Memo 不能放进去。

本页目录