调用 la Object#send 方法,但在给定不存在的方法时不会中断 (Ruby)

Calling methods a la Object#send, but not breaking when given a nonexistent method (Ruby)

我正在尝试使用 send 方法在 Ruby 中做这样的事情:

class Foo
  def bar
    puts "Foo's bar method"
  end
end

foo = Foo.new
foo.send :bar # => "Foo's bar method"
foo.send :baz # => NoMethodError: undefined method `baz' for #<Foo:0x00000000a2e720>
              # Is there a way I can send :baz to foo without the program breaking?
              # I.e., don't call anything if the given method doesn't exist.

显然,传递不存在的 :baz returns 是一个错误,但我想知道是否有一种方法可以以类似 send 的方式调用确实存在的方法,对于传入的不存在的方法,我只是希望程序不要中断。有谁知道这样做的东西吗?

如果您正在使用 Rails,您可以尝试查看 try

您可以使用method_missing

def respond_to_missing?(*)
  true
end

private

def method_missing(*)
end

这将使您的对象成为 return nil 以响应任何未定义的方法。

有关实现 NullObject 模式的更强大方法,请查看 Avdi Grimm 的 naught gem。