gpt4 book ai didi

ruby - 在 Ruby 中,为什么堆栈跟踪中没有变量名?

转载 作者:数据小太阳 更新时间:2023-10-29 07:48:20 25 4
gpt4 key购买 nike

在具有关联的 Rails 应用程序中(例如 Post belongs_to user),一个常见的异常(exception)是:

NoMethodError: undefined method `user' for nil:NilClass

无处不在,这让初学者相信 user 是 nil。为什么我们没有更直观的错误,例如以下?

NoMethodError: `@post' is a nil:NilClass and doesn't have the method `user'

编辑:为什么这会被否决?这个问题是合理的。我想知道是否有技术原因阻止这种情况。

最佳答案

首先,我不同意原著的说法。该消息清楚地表明 user 是未定义的方法,而不是变量或值。我不确定有人怎么会认为 user 是基于此消息的变量。

然而,您的问题的答案是,在调用“用户”方法时,目标对象已经从引用它的任何变量加载。调用“用户”的调用逻辑不知道该对象来自何处。它可能是一个局部变量、一个实例变量、一个常量……无法判断。此外,Rails 的“whiny nil”逻辑发生在 method_missing 实现中,与对象的原始访问相去甚远;原始变量查找的上下文甚至不再在范围内。

关于ruby - 在 Ruby 中,为什么堆栈跟踪中没有变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14988504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com