我正在尝试在Ruby中创建一个条件语句。如果我的各种数字的数组为空或为零,则应返回一个空数组,否则应对数字进行排序。这是我到目前为止所做的。
num == nil || num.empty? ? return num : num.sort!
...其中num是我的数组。但是我收到以下错误:
syntax error, unexpected tIDENTIFIER, expecting ':'
如果num是数字数组或nil,则会出现此错误。我不确定为什么这不起作用。有什么想法吗?
答案 0 :(得分:4)
要修复代码,请将您拥有的内容更改为以下内容之一:
num.nil? || num.empty? ? [] : num.sort
num.nil? ? [] : num.sort
(num || []).sort
num.to_a.sort
如果num
为num
,后两者将nil
转换为空数组,然后对结果进行排序。请参阅NilClass.to_a。
答案 1 :(得分:2)
这是因为您将return num
置于三元运算符构造中。优先规则不会根据需要解析它。移除return
,它不会引发错误(虽然它不会按您的意愿运行; nil
num
时会返回nil
。或者,如果您只想在条件满足时使用return
,那么您应该(return num)
。
但为了您的目的,更好的代码是:
num.to_a.sort
答案 2 :(得分:0)
如果您想确保使用数组,请致电:
Array(num).sort
因为它的工作原理如下:
Array(nil) #=> []
Array([]) #=> []
Array([1, 2]) #=> [1, 2]