spl 在 for 10 循环中 调用自定义函数, 只执行一次,后边是第一次的值
编写的 spl 在 for 10 这样的循环中调用自定义函数(无参数),代码只执行了一次,后边一直用第一次的返回值。
示例 spl 如下
结果如下
"编写的 spl 在 for 10 这样的循环中调用自定义函数(无参数),代码只执行了一次,后边一直用第一次的返回值。 示例 spl 如下 [图片] 结果如下 [图片]"
编写的 spl 在 for 10 这样的循环中调用自定义函数(无参数),代码只执行了一次,后边一直用第一次的返回值。
示例 spl 如下
结果如下
这个循环第一圈之后就 return 了。
另外,刚赋了值又填成 null 是什么意思?
而且,为什么要用 for,这是 SPL 不提倡的写法。SPL 提倡这样写:100.new(#: 编号, randomFullName(): 姓名, randomIDCardNo(…): 身份证号 )
是生成了 100 条记录,我贴图出来看看,100.new 我试一下
我做的是页面配置自动生成 spl,字段赋值方式比较复杂,用 100.new 这样不太方便。编号可以设置开始值和增长步长的,还有其他的赋值方式,如下图
100.new 和那个 for 是一回事,只要你那个函数每次调用返回不同,就会不同。你先确认那个函数每次会返回新值
函数不在 for 里调用返回新值,在 for 里就只第一次返回新值
表达式 com.scudata.expression.Function 类里有如下方法:
public Node optimize(Context ctx) {
boolean opt = true;
if (param != null) {
// 对参数做优化
opt = param.optimize(ctx);
}
}
这个方法是用于把表达式里的常表达式优化成常数节点,以此来提高计算效率
如果函数的参数是常数则函数会被默认优化成常数节点,比如 sum(2,3) 会被优化成 5。
所以如果参数是常数的函数返回值不是常数的需要重载 optimize 方法。
大概可以重载成如下样子:
public Node optimize(Context ctx) {
if (param != null) {
param.optimize(ctx);
}
}
好的。我改下代码,谢谢🙏