gpt4 book ai didi

ruby - 在 Ruby 中使 NullObject 评估为 falsy

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

实现后Null Object Pattern在 Rails 应用程序中(也在 RubyTapas 第 112 集中描述)我重构了一些代码,但有一个语法结构似乎不再起作用。

我曾经写过像 current_user || 这样的语句redirect_out,如果设置了 current_user,它会返回它,如果它是 nil,它会重定向出去,但现在 current_user 可能是 Null::User,因此是“真实的”,并且该片段永远不会重定向。

我尝试定义 || 运算符,但没有成功。有什么方法可以将此语法用于空(但“真实”)对象?

最佳答案

我认为您只是半途采用了该模式,并没有正确地采用它的精神。我的理解是该模式的真正目的是避免 ||

调用current_user || 应该有一些目的redirect_out,这可能是用它做一些事情,或者获取它的一些属性。例如,假设您的代码具有:

(current_user || redirect_out).foo

current_user 不是 Null::User 的实例时,您想对其调用 foo。在这种情况下,您应该做的是将 Null::User#foo 定义为 redirect_out(可能后面还有一些操作,例如 foo on其他类)。

class Null::User
def foo; redirect_out ... end
end

代替(current_user || redirect_out).foo,你应该这样做

current_user.foo

current_user 不是Null::User 实例时,它将调用foo。当它是这样的实例时,redirect_out ... 例程将被调用。

关于ruby - 在 Ruby 中使 NullObject 评估为 falsy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17988923/

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