没有定义第二种方法?

时间:2012-05-28 17:36:05

标签: ruby methods metaprogramming null ruby-1.9

我希望此代码定义两个方法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,它可以正常工作。为什么这样,为什么不定义另一种方法呢?

1 个答案:

答案 0 :(得分:3)

nil.to_s == '',因此您的第二种方法只会被称为guard。你可能想要使用这样的东西:

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