gpt4 book ai didi

Ruby 分配变量或在 nil 时引发错误

转载 作者:行者123 更新时间:2023-12-02 02:21:35 24 4
gpt4 key购买 nike

在 kotlin 和 C# 中,您可以分配一个变量,否则如果值为 nil,您可以使用 ?:?? 运算符抛出异常。

例如,在 C# 中:

var targetUrl = GetA() ?? throw new Exception("Missing A");
// alt
var targetUrl = GetA() ?? GetB() ?? throw new Exception("Missing A or B");

这在 ruby 中可能吗?如果是这样,怎么办?

基本上,我想做的是这个

target_url = @maybe_a || @maybe_b || raise "either a or b must be assigned"

我知道我能做到

target_url = @maybe_a || @maybe_b
raise "either a or b must be assigned" unless target_url

但如果可能的话我想用一行来完成

最佳答案

Basically, what I want to do is this

target_url = @maybe_a || @maybe_b || raise "either a or b must be assigned"

您必须在 raise 中添加括号才能使代码正常工作:

x = a || b || raise("either a or b must be assigned")

使用控制流运算符 or 而不是 || 会“更正确”:(这使得括号可选)

x = a || b or raise "either a or b must be assigned"

这是 Perl 的“do this or die”习惯用法,我认为它干净利落。它强调了这样一个事实:raise 并不为 x 提供结果 - 调用它只是因为它的副作用。

但是,有些人认为 or/and 令人困惑,根本不应该使用。 (参见rubystyle.guide/#no-and-or-or)

Rails 大量使用的一种模式是有两种方法,其中一种没有 !,它不提供错误处理:

def a_or_b
@maybe_a || @maybe_b
end

还有一个带有 ! 的功能:

def a_or_b!
a_or_b || raise("either a or b must be assigned")
end

然后通过以下方式调用:

target_url = a_or_b!

关于Ruby 分配变量或在 nil 时引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66326134/

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