julia - `ifelse` 和 Julia 中的三元运算符有什么区别?
问题描述
假设我有这个代码:
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 通常足够聪明,如果可能的话,无论哪种方式都可以做到最好。
推荐阅读
- javascript - JS 一行 'for' 和 'push' 到数组
- android - 我想在 Android 中播放自定义声音通知
- filesystems - Common Lisp 中独立于操作系统的路径名
- c# - [Authorize] 属性在 .Net Core 中从哪里获取登录 URL?
- google-cloud-firestore - FIrestore:查找大文件或目录
- go - cannot assign to v[i], reference to array problem?
- python - 如何以编程方式访问 CosmosDB 主密钥
- python - VSCode zsh:找不到命令:重新启动后的pipenv
- kubernetes - 如何设置 kubernetes RBAC 资源,以便 pod 可以通过客户端访问 API?
- firebase - FirestoreAdminClient exportDocuments 只写入 rules.json 文件