如果您尝试在 Ruby 中的 nil
对象上调用方法,则会出现 NoMethodError
异常并显示消息:
"undefined method ‘...’ for nil:NilClass"
然而,有一个try
Rails 中的方法,如果它被发送到一个 nil
对象,它只返回 nil
:
require 'rubygems'
require 'active_support/all'
nil.try(:nonexisting_method) # no NoMethodError exception anymore
那么 try
如何在内部工作以防止该异常?
最佳答案
像 Ruby 中的所有其他对象一样,nil
有一个类 ( NilClass
),它有方法。例如,nil?
在 NilClass
上定义为返回 true,这就是为什么 nil.nil?
不返回 NoMethodError
。
ruby 中的每个类都可以打开(用新方法更新)。 Rails 打开 NilClass
以添加 try
方法并让它返回 nil
(这也是 try
可以链接的原因即使链中的一个步骤返回 nil
,因为后续的 nil
也 响应 try
)。
关于ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19224665/