我有一个Ruby方法,用于搜索哈希数组并返回该数组的子集。
def last_actions(type = 'all')
actions = @actions
if type == 'run'
actions = actions.select {|a| a['type'] == "run" }
end
return actions
end
这是有效的,除非只有一个动作要返回,在这种情况下我不认为它返回一个包含一个元素的数组,而只是返回元素本身。 这在以后会成为问题。
在这种情况下,确保它返回1个元素的数组的好方法是什么?
感谢。
答案 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]