调用 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。
我正在尝试使用 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。