2013-08-01 11 views
10

ja przeglądając Camping kodzie kiedy zobaczyłem konstruktor z ikoną wykorzystywane tak:Co robi operator splat, gdy nie ma nazwy zmiennej?

class Fruit 
    def initialize(*) 
    end 
end 

Próbowałem patrząc w górę „ikona bez nazwy zmiennej” na tej stronie i Google, ale nie mogłem” t znaleźć coś oprócz informacji o splat jest używany z nazwą zmiennej, takich jak ten *some_var, ale nie bez niego. Próbowałem zabawy z tym na repl i starałem rzeczy jak:

class Fruit 
    def initialize(*) 
     puts * 
    end 
end 

Fruit.new('boo') 

ale wpada na ten błąd:

(eval):363: (eval):363: compile error (SyntaxError) 
(eval):360: syntax error, unexpected kEND 
(eval):363: syntax error, unexpected $end, expecting kEND 

Jeśli ta kwestia nie została już poprosił, może ktoś wytłumaczyć co robi ta składnia?

Odpowiedz

8

Zazwyczaj taka ikona służy do określania argumentów, które nie są używane przez metodę, ale są używane przez odpowiednią metodę w nadklasie. Oto przykład:

class Child < Parent 
    def do_something(*) 
    # Do something 
    super 
    end 
end 

mówi Ten, wywołanie tej metody w super klasy, przekazując je wszystkie parametry, które zostały podane do oryginalnej metody.

źródło: Programowanie rubin 1,9 (Dave Thomas)

+0

To właśnie szczególny przypadek tego, o czym wspomina Josnidhin. – sawa

4

Zachowuje się podobnie do * args, ale nie można zapoznać się następnie w metodzie ciała

def print_test(a, *) 
    puts "#{a}" 
end 

print_test(1, 2, 3, 'test') 

To będzie drukować 1.