more elaborate example in the test
authorChristian Thaeter <ct@pipapo.org>
Mon, 6 Mar 2017 13:31:21 +0000 (14:31 +0100)
committerChristian Thaeter <ct@pipapo.org>
Mon, 6 Mar 2017 13:31:21 +0000 (14:31 +0100)
prototest.lua

index 1d7035e..ac877b5 100644 (file)
@@ -104,3 +104,72 @@ assert(O3:proto_isa(O2))
 assert(O4:proto_isa(Object))
 assert(O4:proto_isa(O3))
 assert(O4:proto_isa(O2))
+
+
+
+
+-- more real example
+
+local Animal = Object:proto_clone {
+  canSwim = function (self) return self.Swim end,
+  canFly = function (self) return self.Fly end,
+  canRun = function (self) return self.Run end,
+}
+
+local Fish = Animal:proto_clone {
+  Swim = true
+}
+
+local Bird = Animal:proto_clone {
+  Fly = true
+}
+
+local Mammal = Animal:proto_clone {
+  Run = true
+}
+
+print ("Fish:canSwim", Fish:canSwim())
+print ("Fish:canFly", Fish:canFly())
+print ("Fish:canRun", Fish:canRun())
+
+print ("Bird:canSwim", Bird:canSwim())
+print ("Bird:canFly", Bird:canFly())
+print ("Bird:canRun", Bird:canRun())
+
+print ("Mammal:canSwim", Mammal:canSwim())
+print ("Mammal:canFly", Mammal:canFly())
+print ("Mammal:canRun", Mammal:canRun())
+
+
+local Waterfowl = Bird:proto_clone {
+  Swim = true
+}
+
+
+local Swan = Waterfowl:proto_clone {
+  Run = true,
+}
+
+print ("Swan:canSwim", Swan:canSwim())
+print ("Swan:canFly", Swan:canFly())
+print ("Swan:canRun", Swan:canRun())
+
+
+local Penguin = Waterfowl:proto_clone {
+  Fly = false,
+  Run = true,
+}
+
+print ("Penguin:canSwim", Penguin:canSwim())
+print ("Penguin:canFly", Penguin:canFly())
+print ("Penguin:canRun", Penguin:canRun())
+
+
+print(Penguin:proto_pcall('canQuack'))
+
+local Duck = Waterfowl:proto_clone {
+  canQuack = function () return true end
+}
+
+print(Duck:proto_pcall('canQuack'))
+