没有 `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!")
解释:
&&
是 Julia 中的短路运算符。因此,仅在需要评估时才评估第二个值。因此,当第一个 condition
评估为 false
时,无需评估第二部分。
最后,请注意,您也可以在作业中使用它:
julia> x = 2 > 3 && 7
false
julia> x = 2 < 3 && 7
7
但是,这会使x
类型不稳定,因此您可能希望将赋值的右侧包裹在Int
周围,例如x = Int(2 > 3 && 7)
,而不是您的x
将始终是Int
。
【讨论】:
不是三元运算符(因为三元运算符在这种情况下不合适,正如@Carcigenicate 所指出的那样)但这是我正在寻找的,谢谢! 我扩展了答案以表明类似三元的行为是可能的! 好的。如果需要三元行为,使用x = Int(2 > 3 && 7)
似乎是最好的选择。很好,快速的答案,谢谢!
还有一个伴随操作符||
,它仅在第一个表达式为false
时才计算第二个表达式。【参考方案2】:
&&
通常用于此,因为它很短,但您必须知道阅读它的技巧。有时我发现只使用常规的旧 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 三元运算符的主要内容,如果未能解决你的问题,请参考以下文章