Wybacz początkujących pytanie, ale muszę powiedzieć tablicy:Biorąc pod uwagę szereg argumentów, jak wysłać te argumenty do konkretnej funkcji w Ruby?
a = [1,2,3]
i funkcję gdzieś; powiedzmy, że jest to funkcja instancja:
class Ilike
def turtles(*args)
puts args.inspect
end
end
Jak mogę powołać Ilike.turtles
z a
jakbym dzwoniąc (Ilike.new).turtles(1,2,3)
.
Jestem zaznajomiony z send
, ale to nie wydaje się tłumaczyć tablicy na listę argumentów.
Równolegle z tym, czego szukam, jest Javascript apply
, który jest równoważny z call
, ale przekształca tablicę na listę argumentów.
Fantastyczny. W oparciu o twoją doskonałą odpowiedź, znalazłem bardziej dokładny opis tej techniki w [Wikibooks] (http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Method_Calls#Variable_Length_Argument_List.2C_Asterisk_Operator). Jest to całkowicie uzasadnione, biorąc pod uwagę równoległy zapis przechodzący w drugą stronę. Och, naprawdę Ruby. Zauważyłem również, że możesz przedkładać własne argumenty bez kłopotliwego "a.unshift", wiercąc się przy użyciu "Ilike.new.turtles" (1,2,3, * a) ", chociaż postpending wydaje się wymagać takiego manewru. –
@StevenXu W Ruby 1.9 można również splatować po "postpending". "a = [1,2]; b = [4,5]; p (0, * a, 3, * b, 6) # => "0 \ n1 \ n2 \ n3 \ n4 \ n5 \ n6" ' – Phrogz
Fantastycznie odpowiedział! – RubyFanatic