2009-05-28 24 views

Odpowiedz

1

Operator splat jest słabo udokumentowany w podstawowej dokumentacji Rubiego od wersji Ruby 2.4. Jest to jednak podstawowa funkcja języka, a kod źródłowy dla operatora splat można znaleźć w vm_eval.c pod rb_yield_splat(VALUE values).

The unit test dla rb_yield_splat czyni go bardziej zrozumiałym, co się dzieje:

it "yields with passed array's contents" do 
    ret = nil 
    @s.rb_yield_splat([1, 2]) { |x, y| ret = x + y } 
    ret.should == 3 
end 
+0

To świetnie, ale skąd wiesz, gdzie jest źródło? –

+0

I [szukał tego] (https://github.com/ruby/ruby/search?l=C&q=splat&type=&utf8=%E2%9C%93) w repozytorium git Ruby. Ogranicz wyszukiwanie do plików C, a następnie przeczytaj kod źródłowy, dopóki go nie znajdziesz. – anothermh

+0

Wow, to świetnie. Dziękuję Ci. –

7

Pojawiło się kilka szybkich wyszukiwań Google, które zostały zaimplementowane w eval.c. Możesz znaleźć odniesienia do "splat" w kilku miejscach w pliku, ale nie jestem dostatecznie zaznajomiony z wewnętrznymi działaniami Ruby, aby mieć jakikolwiek sens.

+0

Dzięki za to, Martin. Po prostu próbuję zrozumieć świat Ruby. Zasadniczo, jeśli jest to rubin, a nie szyny, źródłem prawdopodobnie nie jest Ruby, co ma sens. –

+0

Operator splat jest częścią podstawowego języka ruby, a nie biblioteki. Może być używany na każdym obiekcie, który definiuje metodę #to_ary, ale gdy jest używany do zbierania wielu wartości w jedną zmienną (jak w 'a, * b = 1,2,3,4,5'), zawsze tworzy Szyk. – rampion

+0

@Rampion, dzięki za to. Tak więc domyślam się, że moje prawdziwe pytanie brzmi: czy są jakieś "funkcje biblioteki" (dla których kod źródłowy jest w Ruby), które nie wymagają "wymagają"? –