2009-11-13 17 views

cevap

60

splat operator. Sıklıkla bir diziyi bir işleve parametrelere ayırmak için kullanılır.

def my_function(param1, param2, param3) 
    param1 + param2 + param3 
end 

my_values = [2, 3, 5] 

my_function(*my_values) # returns 10 

Daha yaygın o argümanların rastgele sayı kabul etmek için kullanılır

def my_other_function(to_add, *other_args) 
    other_args.map { |arg| arg + to_add } 
end 

my_other_function(1, 6, 7, 8) # returns [7, 8, 9] 

(Bu ifadelerin ikisi de çalışacaktır rağmen uyarısı olmadan) Ayrıca çoklu görev için çalışır:

first, second, third = *my_values 
*my_new_array = 7, 11, 13 

Örneğiniz için, bu iki eşittir:

p *1..10 
p 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 
+1

Bana öyle geliyor ki, a, b, c = * myvalues ​​ , a, b, c = myvalues ​​ 'a eşdeğerdir ya da bu durumda splat operatörünü dolaylı olarak kullanan rubyedir? –

+0

@Patrick Evet, bir tarafta bir nesne ve diğer tarafta birden fazla nesne bulunan atamalar, bir splat operatörünü ima eder. Yani bu çok kullanışlı bir örnek değil sanırım. – Neall