1

このコードで、nil値とfalse値を防ぐ2つのメソッドとを定義する必要がnilguardあります。falseguard

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 == ''、したがって、2番目のメソッドは単にと呼ばれguardます。代わりに、次のようなものを使用することをお勧めします。

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