karate - 为什么我们可以从空手道函数中设置列表而不是常量?
问题描述
从空手道函数设置常量时,我们需要 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]
解决方案
举个例子keys
。当函数被声明时,keys
它是可用的,并且实际上是一个 JavaList
幕后。该函数可以继续调用该add()
方法而没有任何问题。参考keys
是固定的,不会改变。
但是,当您尝试对原始类型(例如字符串或数字)执行相同操作时,您无法从 JS 引擎中更改对空手道变量的引用。您必须要求空手道设置(或获取)最新值。
推荐阅读
- symfony - 如何在具有动态子域的树枝中生成正确的路线?
- regex - 一个正则表达式来检测一个单词和一个没有被双引号括起来的字符串
- powershell - 无法将 EXE 输出重定向到文件
- javascript - 如何从 javascript 中的 html 对象访问父文档?
- java - 在书签中保存自定义页码标签
- angular - 如何仅在用户下载应用程序后获取设备令牌?
- java - 我可以通过将 ssl 证书添加到我的 JVM 信任库来使用 https 网络服务
- node.js - Passport.js SSO - 验证用户是否仍登录到 IdP
- java - 有没有更优雅的方式来启动基于列表的线程?
- azure - 如何从 Azure DevOps 创建 Epic 和功能文档