Почему этот фрагмент:Weird `return` поведение при переходе от Мац рубинового до JRuby
def dump_dump
get_dump = lambda do
return 1 if $n
$n = true
module_exec &get_dump
2
end
p get_dump[]
end
Module.new do
module_exec &method(:dump_dump)
end
печать 2
в рубин 2.0.0p481 (2014-05-08) [x64-mingw32]
но 1
in jruby 1.7.15 (1.9.3p392) 2014-09-03 82b5cc3 на 64-разрядном сервере Java HotSpot (TM) VM 1.7.0_67-b01 + jit [Windows 8-amd64]?
Я хотел бы понять проблему.
UPD: должно ли быть сообщено где-нибудь?
Вы уверены, что вы не заменили их друг другом? Мой jruby возвращается через все вызовы - вот как я заметил эту проблему. Исходный код проходил по дереву и должен был возвращать длинный вектор, но jruby выбрасывал мне ноль, увеличивая исключение в моей программе. – Nakilon
Да, я сделал это в тексте после смены кода. Обновлено с другим ответом ... – adzdavies
Как я помню, когда я попытался в своем самом оригинальном коде использовать '{test []}' вместо '& test', он имел другую область видимости и не видел модульных методов и т. поэтому эта замена не эквивалентна. – Nakilon