Ruby语法疑问:三元表达式中return nil为何失效?
Ruby三元表达式中
return nil失效的原因与解决办法 问题场景
在Rubymonk平台做练习题时,需先判断数组是否为nil再执行后续操作(嵌套数组元素相加的逻辑无关核心问题),遇到如下差异:
- 传入nil数组时,代码
ary.nil? ? nil : ary.map {|x,y=0| x + y }能按预期返回nil - 但使用
ary.nil? ? return nil : ary.map {|x,y=0| x + y }时,无法正确返回nil,逻辑失效 - 而if-else结构却能正常工作:
if ary.nil? return nil else ary.map {|x,y=0| x + y } end
原因分析
这是Ruby的运算符优先级导致的问题:三元运算符?:的优先级高于return关键字,原代码会被Ruby解析为(ary.nil? ? return) nil : ary.map { ... },完全偏离了原本的逻辑——return被错误绑定到三元表达式的前半部分,无法正确触发返回nil的操作。
解决办法
给return nil加上括号,强制改变代码的执行优先级,让Ruby把return nil作为一个整体来处理:
ary.nil? ? (return nil) : ary.map {|x,y=0| x + y }
这样就能和if-else结构达到一致的效果,正确返回nil。
内容的提问来源于stack exchange,提问作者Ricman R
相关产品推荐
相关产品推荐

