在什么时候调用查询表达式?

时间:2013-09-26 08:19:32

标签: lasso

在下面的示例中,第二次是否会对可查询的#q进行评估?

local(max = 10, m = 5)

local(q = with n in 1 to 10 select #n+#m) 

#q // 6, 7, 8, 9, 10, 11, 12, 13, 14, 15

if(true) => {
   #q // is it invoke here like the above?
}

我怀疑没有,但如果是这样的话,#q-> asString会调用查询吗?

1 个答案:

答案 0 :(得分:2)

我认为你是对的。这是一个简单的测试,调用一个计数器线程对象,在每次调用时递增。

define test_count => thread {
    data private val = 0
    public asstring => {
      .val += 1
      return .val
    }
}

local(max = 10, m = 5)
test_count

local(q = with n in 1 to 10 select #n+#m + integer(test_count -> asstring))
'<br />'
test_count
'<br />'
#q
'<br />'
test_count
'<br />'
if(true) => {
   #q
}
'<br />'
test_count

结果 - &gt;

1
2
9,11,13,15,17,19,21,23,25,27
13个
14

永远不会处理#q的第二次调用。但是,您可以通过输出来强制它运行。