没有 `else` 的 Julia 三元运算符

Posted

技术标签:

【中文标题】没有 `else` 的 Julia 三元运算符【英文标题】:Julia ternary operator without `else` 【发布时间】:2021-07-08 14:19:52 【问题描述】:

考虑 Julia 中的三元运算符

julia> x = 1 ; y = 2

julia> println(x < y ? "less than" : "not less than")
less than

问题:有没有办法省略声明中的: 部分?相当于

if condition
    # dosomething
end

没有写如果条件不满足,什么都不应该做。

注意:我研究了答案,但没有任何结果,即使是相关问题(1,2)

【问题讨论】:

我不认识 Julia,但如果你不想要一个 else 身体,你就不要一个三元体(在我知道的所有语言中)。三元的目的是根据条件评估两个值之一。如果要运行副作用,请不要使用三元(条件表达式)。 谢谢@Carcigenicate,在这种情况下我可能不应该使用三元运算符。 FWIW,“三元”的意思是“由 3 个部分组成”......所以这个问题听起来有点像“我可以在没有第三部分的情况下拥有一个 3 部分的东西吗?” 【参考方案1】:

只要做:

condition && do_something

举个例子:

2 < 3 && println("hello!")

解释:

&amp;&amp; 是 Julia 中的短路运算符。因此,仅在需要评估时才评估第二个值。因此,当第一个 condition 评估为 false 时,无需评估第二部分。

最后,请注意,您也可以在作业中使用它:

julia> x = 2 > 3 && 7
false

julia> x = 2 < 3 && 7
7

但是,这会使x 类型不稳定,因此您可能希望将赋值的右侧包裹在Int 周围,例如x = Int(2 &gt; 3 &amp;&amp; 7),而不是您的x 将始终是Int

【讨论】:

不是三元运算符(因为三元运算符在这种情况下不合适,正如@Carcigenicate 所指出的那样)但这是我正在寻找的,谢谢! 我扩展了答案以表明类似三元的行为是可能的! 好的。如果需要三元行为,使用x = Int(2 &gt; 3 &amp;&amp; 7) 似乎是最好的选择。很好,快速的答案,谢谢! 还有一个伴随操作符||,它仅在第一个表达式为false时才计算第二个表达式。【参考方案2】:

&amp;&amp; 通常用于此,因为它很短,但您必须知道阅读它的技巧。有时我发现只使用常规的旧 if 语句更具可读性。在 Julia 中,如果你想节省空间,它不需要跨越多行。

julia> x = 1; y = 2;

julia> if (x < y) println("less than") end
less than

julia> if (x > y) println("greater than") else println("not greater than") end
not greater than

请注意,在这种情况下,条件句周围不需要括号;为了清楚起见,我只是添加它们。另外,请注意,为了清楚起见,我将println 移动到字符串旁边,但如果您愿意,可以将整个if 语句放在println 中,就像您在问题中所做的那样。

【讨论】:

以上是关于没有 `else` 的 Julia 三元运算符的主要内容,如果未能解决你的问题,请参考以下文章

如果没有 else 三元运算符

Java中与if else相比三元运算符的弊端?

不同行为的三元运算符 - if/else 与扩展运算符 (...)

Twig 三元运算符,简写 if-then-else

三元运算符

JavaScript 三元运算符变成完整的 if/else 语句问题