Ist es in Ruby möglich, alle innerhalb einer Methode definierten lokalen Variablennamen von außerhalb der Methode mithilfe von Metaprogrammierung zu erhalten? Lokale Variablennamen innerhalb einer Methode von außerhalb der Methode ermitteln
def foo
var = 100
arr = [1,2]
end
So etwas wie foo.local_variables.
Ich brauche nur die Variablennamen, nicht ihre Werte abrufen.
Warum ich versuche, diese Variablennamen zu finden: Ich habe eine Klasse, wo ich Setter für alle Instanzvariablen dynamisch generieren möchte initialisiert in "#initialize".
Damit innen „initialisieren“ zu tun, ich mag etwas bin mit instance_variables.each do |inst_var_name| define_singleton_method(...) do ...
Dies funktioniert: Jedes instanzierte Objekt erhält seinen Setter als Singleton-Methoden. Ich suchte jedoch nach einer Lösung, bei der ich die Namen der Instanzvariablen von außerhalb der "initialize" -Methode lesen konnte, um "#define_method" für sie verwenden zu können und um normale Methoden und keine Singleton-Methoden zu erstellen.
Nein, das ist nicht möglich. Im Gegensatz zu Instanzvariablen, die so lange existieren, wie das Objekt existiert, sind lokale Variablen nicht vorhanden, bis die Methode aufgerufen wird und nicht mehr existiert, sobald die Methode zurückkehrt. Es gibt kein "innerhalb der Methode" und "außerhalb der Methode"; Es gibt nur "während die Methode ausgeführt wird" und "während die Methode nicht ausgeführt wird". Welches Problem versuchen Sie zu lösen? –
Wenn es möglich ist, wie viele Metadaten Ruby zur Laufzeit halten soll? Wie viel Speicher werden sie einnehmen? Es ist einfach nicht machbar. – Aetherus
@ Jordan stimme ich nicht zu. Ich versuche nicht, den Wert von lokalen Variablen zu erhalten, nur ihren Namen. Da es möglich ist, den Quellcode einer Methode zu bekommen, habe ich mich gefragt, ob es auch eine Methode gibt, die Namen nur der lokalen Variablen zu erhalten, die in einer Methode definiert sind (oder versucht werden sollen). –