单行函数中的三元运算符
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,在异常情况下用于中断控制流。
在 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,在异常情况下用于中断控制流。