我需要检查一个变量是否是一个数组,如果不是,则在继续进一步处理之前将其转换为一个。所以,我的代码如下所示:
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 类非常具体的东西,或者这里发生了什么可疑的事情?(在 macOS 上使用 ruby 1.9.3-dev,使用 rvm)