假设我有这段代码:
cond = true
a = cond ? 1 : 2
b = ifelse(cond, 1, 2)
这两个操作有什么区别?
假设我有这段代码:
cond = true
a = cond ? 1 : 2
b = ifelse(cond, 1, 2)
这两个操作有什么区别?
julia> f() = (println("calling f()!"); 1)
f (generic function with 1 method)
julia> g() = (println("calling g()!"); 2)
g (generic function with 1 method)
julia> cond ? f() : g()
calling f()!
1
julia> ifelse(cond, f(), g())
calling f()!
calling g()!
1
ifelse
只是一个普通的函数。就像所有其他函数一样,它的参数总是会被评估。三元运算符在语法上等同于:if cond
f()
else
g()
end
@simd
循环中则不那么微妙)......但通常情况下,如果可能的话,Julia和LLVM会聪明地以最佳方式执行。ifelse
函数可以进行广播。julia> ifelse.([true, true, false], [1, 1, 1], [0, 0, 0])
3-element Vector{Int64}:
1
1
0
if
语句。我经常喜欢那种外观。if cond 1 else 2 end
。 - Nathan Boyer