Klassen sind (meistens) gewöhnliche Gegenstände in TclOO, so dass Sie Dinge wie das Erstellen Instanzmethoden auf das tun können, Klasse selbst. Das ist, was self
in einer Klasse-Deklarationskontext ist für, und es ist eine leistungsstarke Technik:
oo::class create clsTest {
self {
variable i
method i {} {
return [incr i]
}
}
}
Danach können Sie dann tun:
clsTest i
# ==> 1
clsTest i
# ==> 2
clsTest i
# ==> 3
Beachten Sie, dass new
und create
sind tatsächlich nur meistens - vordefinierte Standardmethoden (die zufällig in C implementiert sind), aber Sie können so ziemlich alles hinzufügen, was Sie wollen. Und natürlich erbt oo::class
von oo::object
.
Sie brauchen wirklich nur Tricks, wenn Sie die Methoden auf Klassenebene auch als auf Instanzen aufrufbare Methoden erscheinen lassen wollen. Ich empfehle es nicht wirklich, aber es ist mit weitergeleiteten Methoden möglich:
oo::class create clsTest {
self { ... }
# This is actually the simplest thing that will work, provided you don't [rename] the class.
# Use the fully-qualified name if the class command isn't global.
forward i clsTest i
}
Danke, war sehr hilfreich. – BabyGroot