From a2513b3633b5e1972c032132fc1ad986e072ecb1 Mon Sep 17 00:00:00 2001 From: Vinicius Silva Date: Mon, 22 Jan 2024 22:36:12 -0300 Subject: [PATCH] Casting interface implemented --- 16_interfaces/casting.v | 41 ++++++++++++++++++++++++++++++++++++++ 16_interfaces/interfaces.v | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 16_interfaces/casting.v diff --git a/16_interfaces/casting.v b/16_interfaces/casting.v new file mode 100644 index 0000000..7b4c443 --- /dev/null +++ b/16_interfaces/casting.v @@ -0,0 +1,41 @@ + + +struct Dog{ + breed string + speak() string +} + +fn (d Dog) speak() string { + println('Woof') +} + + +struct Cat{ + breed string + speak() string +} + +fn (c Cat) speak() string{ + println('Meow') +} + +interface Something{} + + +fn announce(s Something){ + if s is Dog { + println('a ${s.breed] dog') + }else if s is Cat{ + println('a cat speaks ${s.speak()}') + }else { + println('something else') + } +} + +fn main(){ + dog := Dog{'Leonberger'} + cat := Cat{'Siamese'} + + announce(dog) + announce(cat) +} \ No newline at end of file diff --git a/16_interfaces/interfaces.v b/16_interfaces/interfaces.v index 9f931bc..4f173de 100644 --- a/16_interfaces/interfaces.v +++ b/16_interfaces/interfaces.v @@ -1,4 +1,4 @@ -module main + interface Foo{ write(string) string