gpt4 book ai didi

java - 为什么函数内部的操作符 '+'不修改*def创建的变量?

转载 作者:行者123 更新时间:2023-11-30 01:51:22 29 4
gpt4 key购买 nike

我正在尝试处理从 API 得到的作为答案的 json-s 列表。

[
{
"originalEstimate": "16h",
"remainingEstimate": "9h",
"timeSpent": "7h"
},
{
"originalEstimate": "64h",
"remainingEstimate": "63h",
"timeSpent": "1h"
}
]

我必须对字段求和,并且我想出了一个代码,但它似乎没有修改 mySum 变量。

在此示例中,我仅使用了“originalEstimate”。

我尝试手动添加元素并且有效。例如:(parseFloat(getNum(json[0].originalEstimate))) == 16.0

getNum 是一个从字符串中删除“h”的函数。

代码如下所示:

    * def getNum = function (a)  {return a.substring(0,a.length()-1)}
* text raw =
"""
[
{
"originalEstimate": "16h",
"remainingEstimate": "9h",
"timeSpent": "7h"
},
{
"originalEstimate": "64h",
"remainingEstimate": "63h",
"timeSpent": "1h"
}
]
"""
* json json = raw
* def mySum = 0
* def fn = function(x) {mySum = mySum + (parseFloat(getNum(x.originalEstimate)))}
* eval karate.forEach(json,fn)
* print mySum

我预计会看到 80.0 作为原始估计总和,但我收到了 0。而且,它运行完美,只是没有修改 mySum

最佳答案

是的,当您声明函数时,变量将锁定为函数声明时的值。解决方案是使用 karate.get()karate.set():

* def getNum = function(x){ return x.substring(0, x.length() - 1) }
* def sum = 0
* def fun = function(x){ var temp = karate.get('sum') + parseFloat(getNum(x.originalEstimate)); karate.set('sum', temp) }
* def response =
"""
[
{
"originalEstimate": "16h",
"remainingEstimate": "9h",
"timeSpent": "7h"
},
{
"originalEstimate": "64h",
"remainingEstimate": "63h",
"timeSpent": "1h"
}
]
"""
* eval karate.forEach(response, fun)
* print sum

关于java - 为什么函数内部的操作符 '+'不修改*def创建的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55920830/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com