我定义了一个采用数组(字符串)的方法,比如
def list(projects) puts projects.join(',') end list(['a','b'])
但是,作为一个只用一个String元素组成的Array来调用它的简写,我希望同样的函数也能接受一个普通的String
list('a')
解决方法
为什么不是这样的:
def list(*projects) projects.join(',') end
然后你可以随意调用它
list('a') #=> "a" list('a','b') #=> "a,b" arr = %w(a b c d e f g) list(*arr) #=> "a,b,c,d,e,f,g" list(arr,'h','i') #=> "a,g,h,i"
splat(*)会自动将所有参数转换为数组,这样您就可以毫无问题地传递数组和/或字符串.它也适用于其他对象
list(1,2,'three',arr,{"test" => "hash"}) #=> "1,three,a,{\"test\"=>\"hash\"}"
谢谢@Stefan和@WandMaker指出Array#join可以处理嵌套的数组