我将代码库从1.8升级到1.9。我在我的代码中遇到了几个地方(只有规格说明,不知道这是否是巧合),在没有变量的块出现问题的地方。给他们一个虚拟变量可以解决问题。这里有一个例子:Ruby 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
这是怎么回事?
lambda表达式,特效,和阻止所有不同的表现在Ruby中,所以请一定要指定正确的,而不是交换他们。我相信你的意思是* blocks *,而不是Procs/lambda。 – 2012-03-12 22:42:07
哎呀 - 是的,我知道,只是读了一些关于lambdas的东西,并将它放在大脑上:D现在修复了 – 2012-03-12 22:45:10
这与Factorygirl有一定关系。例如,从我的ruby版本1.9.2开始,这工作得很好irb:5.times {puts rand(20)} – kclair 2012-03-12 23:19:08