我有一个players()
方法,返回所有球员的名字。
我想使用这个,作为twitter流的参数,像这样:
@client.track(players) do |tweet|
gem不允许这样做,所以我必须这样做:
@client.track('player1', 'player2', 'player3') do |tweet|
但那太糟糕了,因为我有那么多球员。
是一种方式来解析我的数组到那个列表的字符串?
我想你要找的是*
,"splat"操作符:
players = [ "player1", "player2", "player3" ]
@client.track( *players )
# ...is equivalent to...
@client.track( "player1", "player2", "player3" )
在任何响应to_ary
的对象(如Array, Hash和大多数其他Enumerables)之前放置一个splat将把它的项转换为参数列表。它非常方便,在探索更多Ruby代码时,您将经常看到它。下面是另一个例子:
a = [ 3, 4 ]
[ 1, 2 ].push( a ) # no splat
# => [ 1, 2, [ 3, 4 ] ]
[ 1, 2 ].push( *a ) # splat!
# => [ 1, 2, 3, 4 ]
你也可以直接在对象上使用它,而不仅仅是变量:
[ 1, 2, *[ 3, 4 ] ]
# => [ 1, 2, 3, 4 ]