Я обновляю кодовую базу от 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
Что здесь происходит?
Лямбда, проки, и блокирует все ведут себя по-разному в Ruby, так что будьте уверены, чтобы указать правильный и не перепутать их. Я считаю, что вы имеете в виду здесь * blocks *, а не Procs/lambdas. –
whoops - да, я знал это, просто читал что-то еще о лямбдах и имел это на мозге: D исправлено сейчас –
, это должно иметь какое-то отношение к Factorygirl. Например, это очень хорошо работает с моей рубиновой версией 1.9.2 irb: 5.times {puts rand (20)} – kclair