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{
|
interface Foo{
|
||||||
write(string) string
|
write(string) string
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue