发布于 2026-01-06 1 阅读
0

NoMethodError:未定义方法,对象为 nil:NilClass... 已解释

NoMethodError:未定义方法,对象为 nil:NilClass... 已解释

这是一个常见的 Ruby 错误,它表示您尝试在对象上调用的方法属性尚未定义。

NoMethodError: undefined method SOME_METHOD for nil:NilClass
Enter fullscreen mode Exit fullscreen mode

例如,StringRuby 中的类有一个方法size(它与同义length,所以我可以这样写……)

greeting = "hello"
greeting.size
#=> 5
Enter fullscreen mode Exit fullscreen mode

loveliness该字符串不存在,所以当我输入时,会得到……

NoMethodError: undefined method loveliness for nil:NilClass
Enter fullscreen mode Exit fullscreen mode

我发现,当我以为自己在操作一个带有方法的对象,但实际上却在操作一个带有属性的哈希时,就会出现这种情况。

my_hash[:loveliness]
# "very lovely" yay, this is a thing that exists!
my_hash.loveliness
# NoMethodError: undefined method loveliness nil:NilClass
Enter fullscreen mode Exit fullscreen mode

当然,因为这是 Ruby,loveliness如果我们愿意,我们可以通过猴子补丁非常轻松地String定义类。

class String

  def loveliness
    "very lovely"
  end

end
Enter fullscreen mode Exit fullscreen mode

现在我们知道这条绳子有多好了。如果我说错了什么或者表达得不够清楚,请随时留言补充说明。

祝您编程愉快❤️

文章来源:https://dev.to/ben/nomethoderror-undefined-method-for-nil-nilclass-explained-422b