1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

rewrite interfaces

This commit is contained in:
Alexander Medvednikov
2019-11-08 06:03:06 +03:00
parent f5438477df
commit 985fb91ee8
8 changed files with 155 additions and 47 deletions

View File

@ -2,13 +2,16 @@ struct Dog {
breed string
}
fn (d Dog) speak() {
println('dog.speak()')
struct Cat {
breed string
}
fn (d Dog) name() string {
return 'old gray'
}
fn (d Cat) name() string { return 'Cat' }
fn (d Cat) speak() { println('meow') }
fn (d Dog) speak() { println('woof') }
fn (d Dog) name() string { return 'Dog'}
interface Speaker {
name() string
@ -16,10 +19,14 @@ interface Speaker {
}
interface Speak2er {
speak()
name() string
speak()
}
struct Foo {
speaker Speaker
}
fn perform_speak(s Speaker) bool {
s.speak()
return true
@ -28,5 +35,11 @@ fn perform_speak(s Speaker) bool {
fn test_perform_speak() {
d := Dog{}
assert perform_speak(d)
cat := Cat{}
assert perform_speak(cat)
f := Foo {
//speaker: d
}
}