def number =1def eagerGString ="value == ${number}"def lazyGString ="value == ${ -> number }"asserteagerGString =="value == 1"assertlazyGString =="value == 1"number =2asserteagerGString =="value == 1"assertlazyGString =="value == 2"
可以看见,eagerGString是普通的双引号插值站位替换,lazyGString是双引号闭包插值替换,我们可以发现在number变为2以后他们的运算结果就有了差异。可以明显推理到结论,一个普通插值表达式值替换实际是在GString创建的时刻,一个包含闭包的表达式由于延迟运算调运toString()方法,所以会产生一个新的字符串值。
原文以上。
然后我验证:
为什么说这个是闭包的延迟运算导致 我怎么看像是响应式
网友评论