Casting interface implemented
This commit is contained in:
parent
b800b3c07b
commit
a2513b3633
|
|
@ -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)
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
module main
|
||||
|
||||
|
||||
interface Foo{
|
||||
write(string) string
|
||||
|
|
|
|||
Loading…
Reference in New Issue