【问题标题】:What is the difference between `ifelse` and the ternary operator in Julia?`ifelse` 和 Julia 中的三元运算符有什么区别?
【发布时间】:2021-04-20 19:16:05
【问题描述】:

假设我有这个代码:

cond = true
a = cond ? 1 : 2
b = ifelse(cond, 1, 2)

这两种操作有什么区别?

【问题讨论】:

  • 注意,你也可以在一行写一个普通的if语句。我经常喜欢那种样子。 if cond 1 else 2 end.

标签: julia


【解决方案1】:

在您编写的示例中,没有有效的区别。但是,如果这两个分支比简单的整数文字更复杂,那么就会有所不同:

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 通常足够聪明,如果可能的话,无论哪种方式都可以做到最好。

【讨论】:

    猜你喜欢
    • 2020-09-12
    • 2018-12-05
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2021-07-08
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多