没有变量的Ruby 1.9块
发布时间:2020-12-17 07:09:42 所属栏目:百科 来源:网络整理
导读:我将代码库从1.8升级到1.9.我在我的代码中遇到了几个地方(只有规格,不确定这是不是巧合),哪里有没有变量的块有问题.给他们一个虚拟变量可以解决这个问题.这是一个例子: 在工厂女工厂,这工作在1.8: Factory.define :thing do |t| t.price { 1 - 0.01*rand(1
我将代码库从1.8升级到1.9.我在我的代码中遇到了几个地方(只有规格,不确定这是不是巧合),哪里有没有变量的块有问题.给他们一个虚拟变量可以解决这个问题.这是一个例子:
在工厂女工厂,这工作在1.8: Factory.define :thing do |t| t.price { 1 - 0.01*rand(10) } end 在1.9以下,兰特(10)返回零.很奇怪.我正在绞尽脑汁为什么环境会在街区内变得不同.问题是,rand甚至不是来自标准库 – 它来自核心语言!因此,实际上没有一种方法可以改变环境. 然后我记得我的规格中的其他一些地方因为无变量的块而破坏了,所以我一时兴起就扔了一个,并且看到它有效. Factory.define :thing do |t| t.price { |dummy| 1 - 0.01*rand(10) } end 这里发生了什么? 解决方法
在factory_girl的最新版本中,定义没有块参数的属性使用instance_eval,并且它假定裸方法调用正在寻找先前的属性定义,模型上的方法或诸如“create”或“build”的语法方法.
为了使“open”或“file”等属性正常工作,代理对象取消定义包括“rand”在内的大多数私有方法.这意味着您需要使用“Kernel.rand”而不仅仅是“rand”. 您可以在此处查看相关来源:https://github.com/thoughtbot/factory_girl/blob/master/lib/factory_girl/evaluator.rb#L16 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容