Juliaifelse中使用isassigned的意外行为

test = [1, 1, 1, 1]
ifelse(isassigned(test, 5), test[5], "nope")

对我来说,这应该产生字符串“nope”,但我得到

BoundsError: attempt to access 4-element Array{Int64,1} at index [5]

这是错误还是预期的功能?

现在,我正在使用

if isassigned(test, 5) test[5] else "nope" end

但这在列表理解中不是很清晰。

回答

用:

julia> isassigned(test, 5) ? test[5] : "nope"
"nope"

这应该更具可读性。

ifelse评估所有的参数。这种行为的后果最好用ifelsedocstring 来描述:

这与?or不同if在于它是一个普通函数,因此首先评估所有参数。在某些情况下,使用ifelse代替if语句可以消除生成代码中的分支并在紧密循环中提供更高的性能。


以上是Juliaifelse中使用isassigned的意外行为的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>