我正在将一个代码库从1.8升级到1.9。我在我的代码中遇到了几个问题(只有规范,不确定是否是巧合),其中有些块没有变量。为它们提供虚拟变量可以解决这个问题。下面是一个例子:
在工厂女孩的工厂中,这在1.8下可以正常工作:
在1.9版本下,
然后我想起来,我的一些规范中的其他地方也因为没有变量块而出现问题,所以我试着将一个变量块放进去,结果竟然成功了。
这里发生了什么?
在工厂女孩的工厂中,这在1.8下可以正常工作:
Factory.define :thing do |t|
t.price { 1 - 0.01*rand(10) }
end
在1.9版本下,
rand(10)
返回nil
,非常奇怪。我一直在想为什么块内部的环境会不同。事实上,rand
甚至不是来自标准库,而是来自核心语言!因此,环境并没有什么区别。然后我想起来,我的一些规范中的其他地方也因为没有变量块而出现问题,所以我试着将一个变量块放进去,结果竟然成功了。
Factory.define :thing do |t|
t.price { |dummy| 1 - 0.01*rand(10) }
end
这里发生了什么?