Ich versuche, einen kleinen Ruby-Hack zu erstellen, um etwas wie die Rückseite des Symbols # to_proc hack zu machen. Während der Symbol # to_proc Hack das möglich macht:
%Vor%ist dasselbe wie
%Vor%Ich möchte das möglich machen:
%Vor%wäre dasselbe wie
%Vor%Das Problem ist, dass, außer some_method ist eine Kernel-Methode, was es wirklich bedeuten würde:
%Vor%Wenn ein Block explizit übergeben wird, wird er innerhalb der Bindung erstellt, in der diese Zeile geschrieben ist, so dass er selbst korrekt auf das aktuelle Objekt zugreift und alles funktioniert. Wenn der Block jedoch in der Methode to_proc des Arrays erstellt wird, befindet sich self innerhalb der Array-Bindung (und bezieht sich auf das Array selbst). Vielleicht ist es nicht möglich zu tun, was ich versuche, aber ich würde einige Ideen aus der Community lieben.
Hier ist mein Hack so weit. Dies funktioniert, solange die Methode eine Kernel-Methode ist und in Array verfügbar ist:
%Vor%Mit diesem Hack funktioniert diese Zeile und setzt die drei Symbole:
%Vor%Es ist für mich bereits nützlich, weil ich mich häufig in der Konsole ein Array von ActiveRecord-Objekten ansehen möchte, und es erspart mir die Eingabe von {| i | setzt i}. Aber es wäre noch nützlicher, sie in Objekten verwenden zu können, so dass eine Methode innerhalb des Objekts aufgerufen wird, wobei jedes Element im Array als Parameter übergeben wird.
Also eine Idee, wie man das bindende Problem funktioniert?
Bitte antworten Sie nicht beide mit "Sie wollen das nicht, weil es die Dinge langsamer laufen lässt" oder "Sie speichern nicht so viele Zeichen, aber es macht den Code weniger lesbar" - Ich kenne diese Dinge schon. :) Dies ist eher eine Art, meine Neugier Art von Hack zu füttern. Ich frage mich nur, ob es möglich ist.
Obwohl Adrian mit der Methode method
die richtige Idee hat, können Sie dies noch einen Schritt weiter vereinfachen:
Anstatt mit der Einführung von Array # to_proc eine unbeholfene Semantik zu machen, warum schreiben Sie nicht einfach Ihre eigenen Enumerable-Methoden, die Ihnen das Leben erleichtern? Vielleicht in etwa so:
%Vor%Tags und Links ruby ruby-on-rails binding