1

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

4

1 回答 1

3

nil.to_s == '',所以你的第二个方法将被调用guard。您可能想改用这样的东西:

@list = { false: false, nil: nil }
@list.each do |s, i|
  define_method "#{s}guard" do |other|
  # ...
于 2012-05-28T17:38:42.413 回答