返回空数组(Ruby)

返回空数组(Ruby),ruby,Ruby,我正在尝试用Ruby创建一个条件语句。如果我的各种数字数组为空或为零,它应该返回一个空数组,否则它应该对数字进行排序。这就是我目前所拥有的 num == nil || num.empty? ? return num : num.sort! …其中num是我的数组。但是,我得到了以下错误: syntax error, unexpected tIDENTIFIER, expecting ':' 如果num是一个数字数组或nil,则会出现此错误。我不知道这为什么不起作用。有什么想法吗 这是因为您将

我正在尝试用Ruby创建一个条件语句。如果我的各种数字数组为空或为零,它应该返回一个空数组,否则它应该对数字进行排序。这就是我目前所拥有的

num == nil || num.empty? ? return num : num.sort!
…其中num是我的数组。但是,我得到了以下错误:

syntax error, unexpected tIDENTIFIER, expecting ':'

如果num是一个数字数组或nil,则会出现此错误。我不知道这为什么不起作用。有什么想法吗

这是因为您将
return num
放在三元运算符构造中。优先级规则不会按您的需要对其进行解析。删除
return
,它将不会引发错误(尽管它不会按您希望的方式工作;
nil
将在
num
nil
时返回
nil)。或者,如果只想在满足条件时使用
return
,则应执行
(return num)

但出于您的目的,更好的代码是:

num.to_a.sort

如果要确保使用阵列,只需调用:

Array(num).sort
因为它是这样工作的:

Array(nil)    #=> []
Array([])     #=> []
Array([1, 2]) #=> [1, 2]

要修复代码,请将所需更改为以下内容之一:

num.nil? || num.empty? ? [] : num.sort

num.nil? ? [] : num.sort

(num || []).sort

num.to_a.sort

如果
num
nil
,则后两种方法将
num
转换为空数组,然后对结果进行排序。请参阅。

那么Ruby中的返回值是否只是假设的呢?Ruby总是返回最后执行的语句的值。但是,如果您想从上一条语句以外的其他地方返回,则可以使用
return
。或者,只需使用
if
/
,然后使用
/
else
,其优先级几乎总是您所期望的:
if num==nil | num.empty?然后返回num else num.sort!结束
由于最后一个代码段而被接受。干得好,先生;)