Мне нужно проверить, является ли переменная массивом, и если нет, преобразовать ее в единицу, прежде чем приступить к дальнейшей обработке.Итак, мой код выглядит следующим образом:
class Test < Struct.new(:args)
def eval
p "1. #{args}"
args = (args.instance_of? Array) ? args : [args]
p "2. #{args}" # woah! [nil]?
# ...other things, with "args" being an array for sure..or not?!?
end
end
Я новичок в ruby, так что, возможно, это не очень идиоматично, но мне кажется, что этот код должен, по крайней мере, работать.Вместо этого, во второй раз, когда я печатаю переменную args
, это [nil]
.Обратите внимание, что если я немного изменю метод eval
:
def eval
p "1. #{args}"
a = args
args = (a.instance_of? Array) ? a : [a]
p "2. #{args}"
end
, все будет работать как положено.Итак, есть что-то очень специфичное для класса Struct, которого я не понимаю, или что-то подозрительное происходит здесь?(используя ruby 1.9.3-dev на macosx, используя rvm)