Julia有三元条件运算符吗?

13

Python、Java和Scala都有三元运算符。在Julia中相应的是什么?


3
你能够尝试一下吗?我认为这和C、C++和Java中的一样。(我也以为Scala使用 ifelse - Bathsheba
2
请查看此处相关编程内容:http://web.mit.edu/julia_v0.3.11/.julia-483dbf5279.amd64_ubuntu1404/share/julia/doc/_build/html/manual/control-flow.html - Irfan434
7
http://stackoverflow.com/documentation/julia-lang/4356/conditionals/15210/ternary-conditional-operator#t=201609301108357883321 - JJJ
3个回答

31

您可能正在指的是这个

a = true
b = 1
c = 2

julia>a ? b : c
1

a = false

julia>a ? b : c
2

23

对于内联使用,如前面的答案所提到的那样,存在一个 ? b : c。然而值得注意的是,在 Julia 中,if-else-end 的工作方式就像大多数 Lisp 方言中的 (if cond expr1 expr2),既充当 if 条件句,也充当三元运算符。因此,if-then-else 返回执行的表达式的返回值。

这意味着您可以编写类似以下的内容:

function abs(x)
    if x > 0
        x
    else
        -x
    end
end

这将返回您想要的内容。您不必使用return语句来退出函数块,只需返回if块返回的值即可。

在一行中,您可以编写

if (x > 0) x else -x end 

这个函数将返回与三元运算符表达式 (x > 0) ? x : -x 相同的结果,但避免了 Perl 风格的 ?: 符号,通常更易读,但链式调用性能较差。

大多数语言都有一个独立于 if-then-else 的三元运算符,因为 if 子句是语句,而在类 Lisp 语言中,它们与其他所有东西一样都是表达式,并且具有返回值。


2
是的!Julia有一个三元运算符。以下是来自Julia文档的一个快速示例:
所谓的“三元运算符”?:与if-elseif-else语法密切相关,但它用于需要在单个表达式值之间进行条件选择的情况,而不是在长代码块中进行条件执行。它之所以被称为三元运算符,是因为它是大多数语言中唯一接受三个操作数的运算符: a ? b : c?之前的表达式a是条件表达式,如果条件a为真,则三元运算符计算:之前的表达式b,否则计算:之后的表达式c。请注意,必须在?:周围留有空格:像a?b:c这样的表达式不是有效的三元表达式(但在?:之后可以接受换行符)。
最简单的理解这种行为的方法是看一个例子。在先前的例子中,println调用由所有三个分支共享:唯一的真正选择是打印哪个文字字符串。这可以更简洁地使用三元运算符来编写。为了清晰起见,让我们首先尝试一个双向版本:
julia> x = 1; y = 2;

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

julia> x = 1; y = 0;

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

相关:*完全复制的答案,但已经正确标注来源* - 例如“...我们期望在Stack Overflow上的答案基本上是原创贡献;整篇文章的抄袭是极其不受欢迎的” - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接