Ruby集合的字符串作为参数



我有一个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 ]

最新更新