Gibt es call_user_func_array() analog in Ruby? Und wie wäre es mit der Klasse create from string, die den Klassennamen enthält? Ich fand nur mit „eval“ ...Ruby :: analog von call_user_func_array()
Antwort
Wenn Sie eine dynamische Methode Namen nennen, verwenden send
:
user.send("method_#{i}")
Dies, wenn i = 1
die method_1
auf user
Objekt aufrufen.
Ruby
verwendet die Terminologie "ein Objekt sendet eine Nachricht an ein anderes Objekt" anstatt "ruft eine Methode/Funktion auf".
Ich würde das als letzten Ausweg bezeichnen. – Reactormonk
@Tass Ich habe alle Arten von Wahnsinn gesehen, wenn es um Metaprogrammierung in Ruby geht (basierend auf einer Proc's Arity in einem DSL zum Beispiel), ich glaube nicht wirklich, dass das zu schlecht ist. –
Ich brauche Klasse von String auch nicht nur Methode. –
eine Funktion von str mit Argumenten von Array a bereitgestellt gegeben nennen:
obj.send str, *a
Sie sind richtig misstrauisch eval zu sein. In Ruby gibt es fast immer einen besseren Weg. Um eine Klasse-Objekt mit einer Zeichenfolge abzurufen, verwenden:
Kernel.const_get str
So zum Beispiel:
> class A; end
> Kernel.const_get('A').class
=> Class
> Kernel.const_get('A').new
=> #<A:0x100360ac8>
Ich sollte hinzufügen, dass es normalerweise nicht in Ruby notwendig sein, eine Klasse auf die Jagd nach basiert auf einem System String, der seinen konstanten Namen enthält. In Ruby Klassen sind reale Objekte, so dass man sie direkt in Sammlungen speichern, ordnen sie Konstanten und Variablen, usw., schließlich eine Klasse-Methode aufrufen, wie #new
mit:
(some expression).new
- 1. Perl __SUB__ analog für Ruby
- 2. Argument von call_user_func_array in PHP
- 3. Analog von Pythons OrderedDict?
- 4. . Net Analog von GWT?
- 5. call_user_func_array vs. call_user_func
- 6. PHPs call_user_func_array in Python
- 7. QMake Analog von cmake "find_package"
- 8. Analog von startActivityForResult für Service
- 9. Python analog von Unix 'which'
- 10. Swift Analog von Java Thread.join()
- 11. Analog von || = operator in elixir
- 12. Matplotlib Analog von R `` pairs`
- 13. Analog von Git Tag Haken
- 14. numpy Analog von Matplotplotlib Konturplot?
- 15. Analog von Angular 2 Provider
- 16. Analog von `let` in ExUnit
- 17. MySQLI bindende Parameter mit call_user_func_array
- 18. Moment.js: Date.now() javaScript analog
- 19. MemoryStream analog in Python
- 20. NSURL analog zu CFURLCreateCopyAppendingPathComponent?
- 21. IsBadReadPtr analog unter Unix
- 22. DirectInput Analog Joystick Bereich
- 23. PHP analog von mysql wie Funktion
- 24. Analog von Pythons setdefault in Golang
- 25. numpy/scipy analog von Matlabs fminsearch
- 26. Mutex analog in SQL?
- 27. #region analog für Eclipse
- 28. PBEKeySpec C++ analog
- 29. C Analog zu STL
- 30. CRUD - Verwenden von "call_user_func_array" zum Erstellen neuer (php-activerecord) Datensatz?
Es hilft, wenn Sie Dokumentation zu den entsprechenden Link . Nicht jeder Rubyist kennt PHP. –
Gibt es auch ein bestimmtes Problem, das Sie lösen möchten? Oder fragst du dich? –
Ein bisschen mehr Kontext würde helfen. Normalerweise würden Sie einen Proc übergeben und 'proc.call (...)' verwenden oder einen Block übergeben und ihm nachgeben. Klingt so, als ob Sie versuchen, PHP in Ruby zu transkribieren, und das funktioniert selten. –