2012-05-28 37 views
1

我希望这段代码能够定义两种方法,nilguardfalseguard,它们可以防止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,它工作正常。为什么这是为什么它不定义其他方法?

回答

3

nil.to_s == '',所以你的第二个方法将被称为guard。你可能想用这样的东西来代替:

@list = { false: false, nil: nil } 
@list.each do |s, i| 
    define_method "#{s}guard" do |other| 
    # ... 
相关问题