v2 / vlib / v / gen / js / tests / interface.v
47 lines · 39 sloc · 564 bytes · 017ace6ea7402430a992aa0820d5e472ebca74c7
Raw
1struct Dog {
2 name string
3 age int
4}
5
6struct Cat {
7 name string
8 age int
9}
10
11interface Animal {
12 say(s string)
13 greet() int
14}
15
16fn (d Dog) say(s string) {
17 println('Dog ${d.name}: "${s}"')
18}
19
20fn (c Cat) say(s string) {
21 println('Cat ${c.name}: "${s}"')
22}
23
24fn (d Dog) greet() int {
25 d.say('Hello!')
26 return d.age
27}
28
29fn (c Cat) greet() int {
30 c.say('Hello!')
31 return c.age
32}
33
34fn use(a Animal) {
35 if a is Dog {
36 println('dog')
37 } else if a is Cat {
38 println('cat')
39 } else {
40 println('its a bug!')
41 }
42}
43
44fn main() {
45 use(Dog{'Doggo', 5})
46 use(Cat{'Nyancat', 6})
47}
48