2012-08-11 39 views
0

我有這樣的代碼:是否有可能在Ruby中的方法調用中展開數組?

def foo(arg_array) 
    arg_array.each do |ar| 
    puts ar 
    end 
end 

my_array = ["Hello", "Bye", "Please"] 

foo my_array # Works fine 
foo "Thanks", my_array # And this not 

有沒有辦法做到的方法調用,如第二個不直接與"Thanks"加盟?

+1

arg_array = {}? {}是一個散列。無論如何:[「謝謝」,* my_array]。 – tokland 2012-08-11 22:53:09

+0

是的,我改變了。 謝謝你的回答,這正是我所尋找的。 – user1261595 2012-08-11 23:15:36

回答

1

啪陣解包:

foo ["Thanks", *my_array] 
0

如果你正在尋找一種快速,清潔的方式來添加元素到現有的陣列,可以使用:

foo ["Thanks"] + my_array 

它創建一個包含"Thanks"一個元素的數組,然後它們連接起來,my_array內容到它上面。您可以檢查出來的IRB如果你喜歡:

my_array = ["Hello", "Bye", "Please"] 
=> ["Hello", "Bye", "Please"] 
["Thanks"] + my_array 
=> ["Thanks", "Hello", "Bye", "Please"] 
+0

不錯的選擇,謝謝。 – user1261595 2012-08-11 23:16:47

0

如果你想接受任何數量的StringArray,並把它們作爲一個單一的陣列,您可以使用此:

def foo(*arg_array) 
    arg_array = arg_array.map { |arg| arg.is_a?(Array) ? arg : [arg] }.flatten(1) 
    arg_array.each do |ar| 
    puts ar 
    end 
end 

my_array = ["Hello", "Bye", "Please"] 

foo my_array # print Hello Bye Please 
foo "Thanks", my_array # prints Thanks Hello Bye Please 
+0

謝謝,很好的建議,但目標只是找到調用現有方法的方法。 – user1261595 2012-08-11 23:13:30

0

如果接受改變的方法,此方法將數組或單個對象的工作:

def foo(*args) 
    args.each do |ar| 
    puts ar 
    end 
end 

* ARGS將改變單一物體插入陣列

foo 'thanks' 
# => prints 'thanks' 
foo ['bar', 'baz', 'foobar'] 
# => prints 'bar' 
# => prints 'baz' 
# => prints 'foobar' 

如果你不想改變方法,您可以添加感謝陣列連接每個呼叫

foo ['Thanks'] + ['to','you'] 
0

簡單!只需添加圖示符(*)爲arg_array在方法定義:

def foo(*arg_array) 
    arg_array.each do |ar| 
    puts ar 
    end 
end 

my_array = ["Hello", "Bye", "Please"] 

foo my_array    # Works fine 
foo "Thanks", my_array # And this also 
相關問題