单行函数中的三元运算符

The ternary operator in a one-line function

在 Julia 中,我可能想编写一个函数,如果输入小于 1,则 returns 0,如果输入小于 returns 2输入大于或等于 1。这是一个非常简单的函数,五行 if else 结构的冗长可能过于冗长。所以我想把它变成一个单行函数。我能想到的最好的如下:

f(x::Number) = begin (x < 1) && return(0); return(2); end

f(x::Number) = begin x < 1 ? (y=0) : (y=2); return(y); end

有没有更简单的方法来定义这个函数?

julia> f(x::Number) = x < 1 ? 0 : 2
f (generic function with 1 method)

julia> f(0)
0

julia> f(1)
2

julia> f(0.99)
0

备选方案:

f(x::Number) = if (x < 1) 0 else 2 end

Julia 中的 if-elseif-else 语法 将 return 执行的表达式的值 ,恕我直言,这使得类似 C 的三元运算符相当多余.就像它的所有功能都包含在一个更具可读性的替代方案中。

看看您之前的尝试,我认为值得一提的是,与 Python 不同,您很少需要显式使用 return()。通常你可以 return 任何你的 if-elseif-else 块 return,就像你在大多数 lisp 方言中所做的那样。显式 return 类似于 goto 或 break,在异常情况下用于中断控制流。