Gestern fragte jemand nach dem Splat-Operator, und ich wollte den Quellcode sehen ... würde das in C oder in Ruby geschrieben sein? Wo würde es gefunden werden?Ruby, Quellcode von Splat?
Antwort
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
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.
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. –
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
@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? –
- 1. Wie für ein Splat Argument in Ruby
- 2. Wie man einen Splat von einer Methode in Ruby zurückgibt
- 3. Download YouTube mit Ruby (Quellcode)
- 4. abrollen/Splat Argumente in Common Lisp
- 5. Ruby-Quellcode-Analysator (etwas wie pylint)
- 6. Ruby on Rails Quellcode Sicherheit/Verschleierung
- 7. Rake Aufgabe w/Splat Argumente
- 8. Tuple Splat/apply in Rust
- 9. Den Quellcode eines Ruby-Blocks drucken
- 10. Wie behandelt Ruby 1.9 Zeichenfälle im Quellcode?
- 11. Gibt es einen Splat-Operator in Elixir?
- 12. Was ist der Zweck von Rubys Double-Splat (`**`) in Methodenaufrufen?
- 13. Wie definiert man eine Methode in Ruby mit Splat und einem optionalen Hash zur gleichen Zeit?
- 14. Parallel Zuordnung mit Klammern und Splat-Operator
- 15. Splat Operator in Verbindung mit Funktion
- 16. Was macht ein double * (splat) -Operator?
- 17. Typ Auflösung mit Splat-Bibliothek und Xamarin.Mac
- 18. Quellcode von android messaging
- 19. Industriespionage von Website-Quellcode
- 20. Rails Original Release Quellcode
- 21. . Net-Bibliothek zum Parsen von Quellcode-Dateien?
- 22. Wiederverwendung einer einzelnen Datei mit Ruby-getestetem Quellcode in Rails?
- 23. Was bedeutet Array * String in Ruby? einige Rails Quellcode
- 24. Wie arbeite ich mit UTF-16LE Quellcode in Ruby?
- 25. Wie kann ich die Ruby-Methode #lcm im Quellcode anzeigen?
- 26. Rubin - Quellcode - Codierstil
- 27. Freigeben von Quellcode zwischen Computern
- 28. Methoden zum Verwalten von Quellcode
- 29. Herunterladen von .NET 4 Quellcode
- 30. Ignorieren von Quellcode im Debugger
das ist toll, aber woher wussten Sie, wo die Quelle ist? –
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
Wow, das ist großartig. Vielen Dank. –