Skip to content

Copy

Lua中的赋值操作(=)是引用赋值,即当你将一个table类型对象赋值给另一个变量时,这两个变量实际上引用的是内存中的同一个对象。这意味着,通过任何一个变量所做的修改都会反映到所有引用该对象的变量上。

Copy控件能创建一个对象的完全独立的副本。

业务属性

属性含义说明输入限定示例值
enable是否启用该控件,未启用时不编译是否编译选择值启用
name控件返回值命名控件输出值变量名常量cloneVar
text与控件关联的文本设计页控件显示常量Copy
param克隆变量流程变量#{a}

使用示例

增加Copy控件,param输入:#{body.var}

img_copy_1.png

增加LuaScript控件,使用=操作符赋值一个变量assignmentVarscript属性为:

lua
local assignmentVar=body.var
local assignmentVar=body.var
img_copy_2.png

最后,使用输出控件,分别对克隆变量赋值变量原变量输出变量值对象虚拟引用地址

使用 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)}"
  }
}
img_copy_3.png

使用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"
    }
}

可以看到,三个输出对象的数据内容都是一致的,赋值变量原变量的虚拟引用地址相同,克隆变量原变量的虚拟引用地址不同。