ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用?

标签 ruby-on-rails ruby activesupport

如果您尝试在 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/

相关文章:

ruby-on-rails - 电影应用的多对多关系

ruby-on-rails - Ruby/Rails 文本解析为对象

ruby-on-rails - rails activesupport 通知 - 错误的数据库运行时值

ruby-on-rails - 在 Ruby 中用 HashWithIndifferentAccess 完全替换 Hash 不好吗?

ruby-on-rails - Rails belongs_to 关联,作为集合的一部分时无法访问所有者的属性?

ruby-on-rails - 如何一次显示一条 Ruby on Rails 表单验证错误消息?

ruby-on-rails - Ruby Rails %r 和 %w

ruby-on-rails - FactoryGirl中如何通过关联链传递参数

ruby-on-rails - 太阳黑子和高级关联搜索

ruby-on-rails - 如何使用主动支持核心分机日期和时间