test = [1, 1, 1, 1]
ifelse(isassigned(test, 5), test[5], "nope")
Run Code Online (Sandbox Code Playgroud)
对我来说,这应该产生字符串“nope”,但我得到
BoundsError: attempt to access 4-element Array{Int64,1} at index [5]
Run Code Online (Sandbox Code Playgroud)
这是错误还是预期的功能?
现在,我正在使用
if isassigned(test, 5) test[5] else "nope" end
Run Code Online (Sandbox Code Playgroud)
但这在列表理解中不是很清晰。
用:
julia> isassigned(test, 5) ? test[5] : "nope"
"nope"
Run Code Online (Sandbox Code Playgroud)
这应该更具可读性。
在ifelse评估所有的参数。这种行为的后果最好用ifelsedocstring 来描述:
这与
?or不同if在于它是一个普通函数,因此首先评估所有参数。在某些情况下,使用ifelse代替if语句可以消除生成代码中的分支并在紧密循环中提供更高的性能。
| 归档时间: |
|
| 查看次数: |
35 次 |
| 最近记录: |