值true
和false
是原子的。如果您不想将它们作为文字值传递,则必须设置一个变量,即
is_sword = false
is_armor = false
is_ring = false
forest is_sword, is_armor, is_ring
似乎这应该解决您的问题,但也值得介绍“可变”对象的概念。例如哈希和数组是可变的:
hash = { armor: false, sword: false, ring: false }
def delete_nil_values(options)
# delete all key-vals from the hash where the val is falsey
options.each_key { |key| options.delete(key) if !options[key]}
options
end
delete_nil_values(hash)
puts hash
# => {}
# it is empty
这可能是也可能不是您想要的;如果你想编写“无副作用”的代码,你应该意识到这一点。
delete_nil_values
如果您使用“克隆”方法顶部的输入,options = Marshal.load(Marshal.dump(options))
那么它将是不可变的。
总结一下:一个函数在运行时评估它的参数。因此,它的变量将与您传入的变量相同,但如果您的代码中有副作用,则变量可能已发生变异。