如何确保方法返回一个数组,即使Ruby中只有一个元素

时间:2010-03-19 15:21:17

标签: ruby arrays return

我有一个Ruby方法,用于搜索哈希数组并返回该数组的子集。

  def last_actions(type = 'all')
    actions = @actions

    if type == 'run'
      actions = actions.select {|a| a['type'] == "run" }
    end

    return actions

  end

这是有效的,除非只有一个动作要返回,在这种情况下我不认为它返回一个包含一个元素的数组,而只是返回元素本身。 这在以后会成为问题。

在这种情况下,确保它返回1个元素的数组的好方法是什么?

感谢。

4 个答案:

答案 0 :(得分:14)

请注意,有一个很好的干净ruby习惯用法可以确保将单个对象和数组视为数组:

a = [1,2,3]
b = 4

[*a]
=> [1, 2, 3]

[*b]
=> [4]

答案 1 :(得分:2)

select总是返回一个数组(除非你在块内部break,否则你不会)。所以无论你的代码出了什么问题,这都不是原因。

当然,如果@actions不包含数组(或其他类型的Enumerable),则对select的调用将导致异常,并且该方法根本不会返回任何内容。在这种情况下,解决方案是确保@actions始终返回一个数组。如何做到这取决于你设置@actions的位置/方式。

答案 2 :(得分:1)

你的观察不仅仅是奇怪的,但你可以试试这个:

def last_actions(type = 'all')
  actions = @actions.dup || []
  actions.delete_if {|a| a['type'] != "run" } if type == 'run'
  actions
end

答案 3 :(得分:1)

你也可以这样做:

a = [1,2,3]
b = 4

Array(a)
=> [1, 2, 3]

Array(b)
=> [4]