首页 > 解决方案 > 为什么我们可以从空手道函数中设置列表而不是常量?

问题描述

从空手道函数设置常量时,我​​们需要 karate.get():
Why operator '+' inside functions does not modify * def made variables?

为什么我们在附加到列表时不需要这个?
这个例子:

Scenario: karate forEach operation on maps
    * def keys = []
    * def vals = []
    * def idxs = []
    * def fun = function(x, y, i){ keys.add(x); vals.add(y); idxs.add(i) }
    * def map = { a: 2, b: 4, c: 6 }
    * eval karate.forEach(map, fun)
    * match keys == ['a', 'b', 'c']
    * match vals == [2, 4, 6]
    * match idxs == [0, 1, 2]

标签: karate

解决方案


举个例子keys。当函数被声明时,keys它是可用的,并且实际上是一个 JavaList幕后。该函数可以继续调用该add()方法而没有任何问题。参考keys是固定的,不会改变。

但是,当您尝试对原始类型(例如字符串或数字)执行相同操作时,您无法从 JS 引擎中更改对空手道变量的引用。您必须要求空手道设置(或获取)最新值。


推荐阅读