【问题标题】:Return empty array (Ruby)返回空数组(Ruby)
【发布时间】:2014-10-03 18:21:05
【问题描述】:

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

num == nil || num.empty? ? return num : num.sort!

...其中 num 是我的数组。但是我收到以下错误:

syntax error, unexpected tIDENTIFIER, expecting ':'

如果 num 是数字数组或 nil,我会收到此错误。我不确定为什么这不起作用。有什么想法吗?

【问题讨论】:

    标签: ruby


    【解决方案1】:

    要修复您的代码,请将您拥有的内容更改为以下之一:

    num.nil? || num.empty? ? [] : num.sort
    
    num.nil? ? [] : num.sort
    
    (num || []).sort
    
    num.to_a.sort
    

    如果numnil,后两者将num转换为空数组,然后对结果进行排序。见NilClass.to_a

    【讨论】:

    • 因为最后一个代码 sn-p 而被接受。干得好,先生;)
    【解决方案2】:

    如果您想确保使用数组,只需调用:

    Array(num).sort
    

    因为它是这样工作的:

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

    【讨论】:

      【解决方案3】:

      这是因为您将return num 放在三元运算符构造中。优先规则不会按照您的意愿解析它。删除return,它不会引发错误(尽管它不会像你想要的那样工作;numnil 时将返回nil)。或者,如果您只想在满足条件时使用return,那么您应该使用(return num)

      但为了您的目的,更好的代码是:

      num.to_a.sort
      

      【讨论】:

      • 那么 Ruby 中的返回值是不是假设的?
      • Ruby 总是返回最后执行的语句的值。但如果你想从最后一条语句以外的地方返回,return 就派上用场了。
      • 或者,只需使用if/then/else,其优先级几乎总是您所期望的:if num == nil || num.empty? then return num else num.sort! end
      猜你喜欢
      • 2015-11-10
      • 2017-07-12
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 2021-08-11
      • 2017-02-27
      • 2020-04-01
      • 2019-04-17
      相关资源
      最近更新 更多