gpt4 book ai didi

hash - 访问子元素时避免检查 nil

转载 作者:行者123 更新时间:2023-12-01 12:52:35 26 4
gpt4 key购买 nike

这可能是一个更美观的问题,但我发现它真的很烦人,因为我总是以一些难看的代码结束。可读性总是很重要,对吧?

我想检查某个值是否存在于哈希中的哈希中。所以我所做的就是这个。

already_exists_data[:data][:user_id]

但是,如果 :data 为 nil,这会给我一个空指针异常,如果 already_exists_data 为 nil,检查 :data 可能会给我一个空指针。所以我最终得到的是:

if already_exists_data && already_exists_data[:data] && already_exists_data[:data][:user_id]
# Do stuff
end

现在这是一些看起来很讨厌的代码。也许我应该将散列修改为一个对象。但我有时会遇到这个问题,想知道你们是如何面对它的。

我目前正在用 Ruby 编写代码,但我在使用其他多种语言时遇到过这个问题。

最佳答案

如果我让我的管家去维多利亚街 34 号的餐 table 上拿一盒巧克力,我会直接问他。我不想说:去找维多利亚街,如果你找到了,请找 34 号,如果你找到了......

我能做到这一点,因为他发现了自己的错误:如果他找不到那条街,他就会空手而归。

因此您应该使用带有空异常处理程序的try。在伪代码中:

try {chocolates = streets("Victoria")(34)("dining room")("table")}

在语言中(如 ruby,带有一些朴素的 syntactic sugar ),其中 block 是您可能编写的表达式:

if try {already_exists_data(data)(user_id)}

do_stuff

语言本身也有帮助:在 perl 中,$streets{Victoria}[34]{dining_room}{table} 是未定义的,例如$streets 是。当然,在您发现地址错误之前,您的管家可能会空手回家多年。 try block 解决方案 - 和您的 if .. && .... - 具有相同的缺点:只有在您真的不关心 Victoria Street 是否有是否为 34 号。

关于hash - 访问子元素时避免检查 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11325791/

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