我目前正在为Ruby中的一个函数执行此操作:
if @to_pass.kind_of?(Array)
@to_pass.map do {|item| do_a_function(item)}
else
do_a_function(item)
end
是否有更短的做法“如果这是一个数组,映射并应用函数,如果没有,那么执行函数”?
答案 0 :(得分:3)
您只需将单个对象转换为数组即可。如果你没有使用输出,每个都比map更好,因为它不会创建一个新数组。
# if single object doesn't respond to to_a
# as Guilherme Bernal pointed out in comments, flatten(1) should be used rather than flatten
[@to_pass].flatten(1).each {|item| do_a_function(item) }
# if it does
@to_pass.to_a.each {|item| do_a_function(item) }
答案 1 :(得分:3)
只需使用Array
方法,它将创建一个包含单个项目的数组,或者只返回原始数组。
Array(@to_pass).map { |item| do_a_function(item) }
答案 2 :(得分:1)
你可以随时转换为数组并使用flatten,如下所示:
([@to_pass].flatten).map { |item| do_a_function(item) }
这是有效的,因为flatten
将保持已经扁平化的数组。
答案 3 :(得分:0)
我会用这个:
[*@to_pass].map{ |e|
...
}
如果@to_pass
是单个元素或数组,则它将转换为数组。