Julia中如何在单行条件表达式内完成多变量赋值?
问题原因与修复方案
错误原因
Julia的三元运算符? :要求?后的两个分支都必须是单个合法表达式。你写的a[j], a[j+1] = a[j+1], a[j]虽然是一个解构赋值操作,但其中的逗号会被Julia错误解析为分隔多个表达式,破坏了三元运算符的语法结构,进而触发colon expected in "?" expression错误。
修复方法
有两种简洁的修复方式:
方式1:用括号包裹赋值表达式
将整个解构赋值操作放在括号中,让Julia将其识别为单个表达式:
function bubble_sort_oneline!(a::Vector) n = length(a) for i in 1:n-1 for j in 1:n-i (a[j] > a[j+1]) ? (a[j], a[j+1] = a[j+1], a[j]) : nothing end end return a end
方式2:用短路求值替代三元运算符
利用Julia的&&短路特性,当条件为真时才执行后续赋值,代码更简洁:
function bubble_sort_oneline!(a::Vector) n = length(a) for i in 1:n-1 for j in 1:n-i (a[j] > a[j+1]) && (a[j], a[j+1] = a[j+1], a[j]) end end return a end
两种方式都能正常运行,实现和原冒泡排序一致的功能。
内容的提问来源于stack exchange,提问作者mysterymachine
相关产品推荐
相关产品推荐

