我希望此代码定义两个方法nilguard
和falseguard
,以防止nil和false值。
Object.class_eval do
@list = [false, nil]
@list.each do |i|
define_method :"#{i}guard" do |other|
if self == i
return other
else
return self
end
end
end
end
出于某种原因,它只定义falseguard
,它可以正常工作。为什么这样,为什么不定义另一种方法呢?
答案 0 :(得分:3)
nil.to_s == ''
,因此您的第二种方法只会被称为guard
。你可能想要使用这样的东西:
@list = { false: false, nil: nil }
@list.each do |s, i|
define_method "#{s}guard" do |other|
# ...