Appearance
Copy
Lua中的赋值操作(=
)是引用赋值,即当你将一个table类型对象赋值给另一个变量时,这两个变量实际上引用的是内存中的同一个对象。这意味着,通过任何一个变量所做的修改都会反映到所有引用该对象的变量上。
Copy控件能创建一个对象的完全独立的副本。
业务属性
属性 | 含义 | 说明 | 输入限定 | 示例值 |
---|---|---|---|---|
enable | 是否启用该控件,未启用时不编译 | 是否编译 | 选择值 | 启用 |
name | 控件返回值命名 | 控件输出值变量名 | 常量 | cloneVar |
text | 与控件关联的文本 | 设计页控件显示 | 常量 | Copy |
param | 克隆变量 | 流程变量 | #{a} |
使用示例
增加Copy控件,param输入:#{body.var}

增加LuaScript控件,使用=
操作符赋值一个变量assignmentVar
,script属性为:
lua
local assignmentVar=body.var
local assignmentVar=body.var

最后,使用输出控件,分别对克隆变量、赋值变量和原变量输出变量值和对象虚拟引用地址
使用 tostring(..) 函数输出对象的虚拟引用地址:
输出控件data属性为:
json
{
"inputVar": {
"dataValue": "#{body.var}",
"referAddress": "#{tostring(body.var)}"
},
"cloneVar": {
"dataValue": "#{cloneVar}",
"referAddress": "#{tostring(cloneVar)}"
},
"assignmentVar": {
"dataValue": "#{assignmentVar}",
"referAddress": "#{tostring(assignmentVar)}"
}
}
{
"inputVar": {
"dataValue": "#{body.var}",
"referAddress": "#{tostring(body.var)}"
},
"cloneVar": {
"dataValue": "#{cloneVar}",
"referAddress": "#{tostring(cloneVar)}"
},
"assignmentVar": {
"dataValue": "#{assignmentVar}",
"referAddress": "#{tostring(assignmentVar)}"
}
}

使用curl请求接口:
$ curl http://localhost:6636/api/copy -d "{\"var\":{\"attr\":\"a\"}}"
$ curl http://localhost:6636/api/copy -d "{\"var\":{\"attr\":\"a\"}}"
接口返回:
json
{
"inputVar": {
"dataValue": {
"attr": "a"
},
"referAddress": "table: 0x02ce5098"
},
"cloneVar": {
"dataValue": {
"attr": "a"
},
"referAddress": "table: 0x02ce9490"
},
"assignmentVar": {
"dataValue": {
"attr": "a"
},
"referAddress": "table: 0x02ce5098"
}
}
{
"inputVar": {
"dataValue": {
"attr": "a"
},
"referAddress": "table: 0x02ce5098"
},
"cloneVar": {
"dataValue": {
"attr": "a"
},
"referAddress": "table: 0x02ce9490"
},
"assignmentVar": {
"dataValue": {
"attr": "a"
},
"referAddress": "table: 0x02ce5098"
}
}
可以看到,三个输出对象的数据内容都是一致的,赋值变量与原变量的虚拟引用地址相同,克隆变量与原变量的虚拟引用地址不同。