gpt4 book ai didi

ruby - 在 ruby​​ 中对 nil 使用 method_missing 是个好主意吗

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

在 ruby​​ 中,我厌倦了在使用对象之前不断检查对象是否具有所有必要的属性和子属性

if (obj && obj[:a] && obj[:a][:b] && obj[:a][:b][:c] && obj[:a][:b][:c] > 0)
# do something useful
end

通过在 NilClass 上定义 method_missing 以返回 nil 来避免这种情况是个好主意吗?

class NilClass
def method_missing(method_name, *args, &block)
nil
end
end

通过正确编写的比较,我可以使用默认值来处理所有事情。
我什至可以与其他表达方式进行比较,例如

if (obj[:a][:b][:c] > 0)
# do something useful
else
# default behaviour if obj[:a][:b][:c] <= 0 or obj[:a][:b][:c] is undefined
end

在特殊情况下,我总是可以手动检查 nil

什么东西会坏?

最佳答案

使用 Hash.fetch 将允许您在它不存在时返回 false 并短路该条件。 http://ruby-doc.org/core-1.9.3/Hash.html#method-i-fetch

if obj.fetch(:a, {}).fetch(:b, {}).fetch(:c, false)
#useful stuff
end

如评论中所述,如果您真的不想检查此对象是否为散列,则您做不到(obj||{}).fetch(:a, {}).fetch(:b, {}).fetch(:c, false)

关于ruby - 在 ruby​​ 中对 nil 使用 method_missing 是个好主意吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33740518/

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