2009-05-28 6 views

Antwort

1

Der Splat-Operator ist in der Ruby-Kerndokumentation von Ruby 2.4 schlecht dokumentiert. Es ist jedoch ein Kernmerkmal der Sprache, und der Quellcode für den Splat-Operator kann in vm_eval.c unter rb_yield_splat(VALUE values) gefunden werden.

Die unit test für rb_yield_splat macht deutlicher, was passiert:

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

das ist toll, aber woher wussten Sie, wo die Quelle ist? –

+0

Ich [suchte danach] (https://github.com/ruby/ruby/search?l=C&q=splat&type=&utf8=%E2%9C%93) im Ruby Git-Repository. Beschränken Sie die Suche auf C-Dateien und lesen Sie den Quellcode, bis Sie ihn gefunden haben. – anothermh

+0

Wow, das ist großartig. Vielen Dank. –

7

Einige schnelle Google-Suche ergab, dass es in eval.c implementiert ist. Sie können an einigen Stellen in der Datei Verweise auf "splat" finden, aber ich kenne die inneren Abläufe von Ruby nicht genug, um einen Sinn darin zu finden.

+0

Vielen Dank für das, Martin. Ich versuche nur, die Ruby-Welt zu verstehen. Also, wenn es Rubin ist und nicht Schienen, ist die Quelle wahrscheinlich nicht in Ruby, was Sinn macht. –

+0

Der Splat-Operator ist Teil der Ruby-Kernsprache und keine Bibliotheksfunktion. Es kann für jedes Objekt verwendet werden, das eine #to_ary-Methode definiert. Wenn es jedoch verwendet wird, um mehrere Werte in einer einzelnen Variablen zu sammeln (wie in 'a, * b = 1,2,3,4,5'), erstellt es immer ein Array. – rampion

+0

@Rampion, danke dafür. Ich denke also, meine wirkliche Frage wäre: Gibt es irgendwelche "Bibliotheksfunktionen" (für die der Quellcode in Ruby ist), die kein "require" benötigen? –

Verwandte Themen