【问题标题】:Does Julia have a ternary conditional operator?Julia 有三元条件运算符吗?
【发布时间】:2017-02-08 22:39:26
【问题描述】:

Python、Java 和 Scala 都有三元运算符。 Julia 中的等价物是什么?

【问题讨论】:

标签: julia ternary-operator


【解决方案1】:

你指的是this吗?

a = true
b = 1
c = 2

julia>a ? b : c
1

a = false 

julia>a ? b : c
2

【讨论】:

    【解决方案2】:

    对于内联使用,一个 ? 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-ish ?: 符号的好处,并且通常更具可读性,但可链接性较差。

    大多数语言都有一个与 if-then-else 分开的三元运算符,因为 if 子句是语句,而在类似 lisp 的语言中,它们就像其他所有语言一样都是表达式,并且有一个返回值。

    【讨论】:

      【解决方案3】:

      是的! Julia 有一个三元运算符。这是来自 Julia 文档Julia docs 的一个简单示例:

      所谓的“三元运算符”?:,与 if-elseif-else 语法密切相关,但用于需要在单个表达式值之间进行条件选择的情况,而不是条件执行较长的块的代码。它之所以得名,是因为它是大多数语言中唯一采用三个操作数的运算符:

      a ? b : c 表达式a,在?之前,是一个条件表达式,三元运算计算表达式b,在:之前,如果条件a为真或表达式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
      

      【讨论】:

        猜你喜欢
        • 2022-01-06
        相关资源
        最近更新 更多