gpt4 book ai didi

ruby - 为什么这两种看似相同的方法操作起来却不一样呢?

转载 作者:数据小太阳 更新时间:2023-10-29 08:16:27 28 4
gpt4 key购买 nike

我的方法 exists_else 有两个参数:basefallback。如果 basenil,则返回 fallback。如果不是 nil,则返回 base。调用 exists_else(true, false) 应该返回 true

如果我使用标准外观的 if 语句,返回的 true 就像我想的那样:

def exist­s_else(bas­e, fallb­ack)
unless base.­nil?
base
else
fallb­ack
end
end

a = true
exists_els­e( a, false­ )
# => true

如果我使用如下所示的内联实现,它会返回 false

def exist­s_else(base, fallback)
base unles­s base.nil­? else fallback
end

a = true
exists_els­e( a, false­ )
# => false

为什么内联实现返回false

最佳答案

你的断言

base unles­s base.nil­? else fallback

应该等同于长格式的 unless 语句不为真;事实上,您不能在后置条件中使用 else。 Ruby 将代码解释为:

def exist­s_else(base, fallback)
base unles­s base.nil­?
else fallback
end

如果您将此(或没有换行符的版本,如您的问题)键入 IRB,Ruby 会发出以下警告:

warning: else without rescue is useless

也就是说,Ruby 试图将else 解释为异常处理代码的一部分,如

def exists_else(base, fallback)
base unless base.nil
rescue ArgumentError => e
# code to handle ArgumentError here
else
# code to handle other exceptions here
end

关于ruby - 为什么这两种看似相同的方法操作起来却不一样呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18691641/

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