Also möchte ich eine Singleton-Methode für ein Objekt definieren, aber ich möchte es mit einer Schließung machen.Ist es möglich, eine Ruby-Singleton-Methode mit einem Block zu definieren?
Zum Beispiel
def define_say(obj, msg)
def obj.say
puts msg
end
end
o = Object.new
define_say o, "hello world!"
o.say
Das funktioniert nicht, weil über „def“, um eine Singleton-Methode definiert, keinen Verschluss, so dass ich eine Ausnahme, dass „msg“ ist ein nicht definierte Variable oder Methode.
Was ich gerne tun würde ist so etwas wie die "define_method" -Methode in der Modul-Klasse, aber so weit ich sagen kann, kann dies nur verwendet werden, um eine Methode auf einer Klasse zu definieren ... aber ich will eine Singleton-Methode ...
Also, ich würde es lieben so etwas zu schreiben:
def define_say(obj, msg)
obj.define_singleton_method(:say) {
puts msg
}
end
Wer weiß, wie ich das erreichen kann, ohne ein Verfahren zur Herstellung eines Proc speichern erstellen zu müssen und dann verwenden der Proc in einer Singleton-Methode? (Im Grunde möchte ich einen sauberen, nicht-hacky Weg, dies zu tun)
brilliant! Funktioniert perfekt! Vielen Dank! –
Ich habe den Link geändert, weil _why AWOL ging, seit diese Antwort gepostet wurde. –