【发布时间】:2012-03-12 22:36:04
【问题描述】:
我正在将代码库从 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
这是怎么回事?
【问题讨论】:
-
Lambdas、Procs 和块在 Ruby 中的行为都不同,因此请务必指定正确的,而不是互换它们。我相信你的意思是 blocks,而不是 Procs/lambdas。
-
哎呀——是的,我知道,只是在阅读有关 lambdas 的其他内容并将其放在大脑中:D 现在已修复
-
这一定和Factorygirl有关。例如,这在我的 ruby 版本 1.9.2 irb 中工作得很好: 5.times { puts rand(20) }
-
这是一个关于像你这样的话题的讨论:github.com/thoughtbot/factory_girl/issues/229 你可以尝试调用 Kernel.rand() 而不是 rand() 吗?
标签: ruby factory-bot ruby-1.9