【发布时间】:2024-01-22 02:01:01
【问题描述】:
在Elixir中如何做类似的条件单行检查?
if (x > 0) ? x : nil
这是灵药界唯一的等价物吗?
if true, do: 1, else: 2
【问题讨论】:
标签: elixir conditional-operator
在Elixir中如何做类似的条件单行检查?
if (x > 0) ? x : nil
这是灵药界唯一的等价物吗?
if true, do: 1, else: 2
【问题讨论】:
标签: elixir conditional-operator
对我来说,if IS 相当于一个三元运算符,因为它计算出的值对于其他各种语言都没有。
所以x = if false, do: 1, else: 2
基本上是x = false? 1 : 2
不确定为什么 Ruby 采用它(如果您来自 Ruby),因为它具有可赋值的 if 语句。在 C 中,三元是有用的,因为代码膨胀与等效的 if 语句。当然,渴望简洁的 C 程序员发疯了,并且做了许多嵌套在嵌套三元组上的操作:)
【讨论】:
是的,Elixir 中没有三元运算符。 if 的关键字版本可能是最接近的:
if condition, do: true_expr, else: false_expr
【讨论】:
我在tweet 中看到了这个替代方案,
is_it_true && "TRUE" || "FALSE"
【讨论】:
is_it_true && false || :foobar 将始终返回 :foobar 而永远不会返回 false。这是因为对于 x 的任何值,x && false 将始终计算为一个虚假值,而对于 x 的任何值,false || x 将始终计算为 x。如果您使用的是 nil 而不是 false,则同样的问题也适用。
a = true && 1 || 2,如果你的结构很好,我看不到这里的问题。
a = argument_received && argument || default_value 如果你确实收到了参数,但它恰好是一个错误,你的程序将忽略它,这可能不是你想要的,所以......肯定有一个陷阱。
一个未提及且更冗长的替代方案是
case condition do true -> true_expr; _ -> false_expr end
【讨论】: