V语言

V语言学习笔记-13接口

2020-05-19  本文已影响0人  lydiandy

接口定义

使用interface关键字定义接口,跟go一样

默认是模块级别,使用pub变为公共级别

接口命名跟结构体一样,要求首字母大写,建议以er风格结尾,非强制

pub interface Speaker {
        speak() string
}

目前没有看到接口可以进行组合或者继承的代码

接口实现

没有接口实现的关键字,类型无需显示声明所要实现的接口,

鸭子类型:只要结构体实现了接口定义的方法,就满足该接口的使用

module main

struct Dog {}

struct Cat {}

fn (d Dog) speak() string {
    return 'woof'
}

fn (c Cat) speak() string {
    return 'meow'
}

interface Speaker {
    speak()string
}

fn perform(s Speaker) {
    println(s.speak())
}

fn main() {
    dog := Dog{}
    cat := Cat{}
    perform(dog) // "woof"
    perform(cat) // "meow"
}

接口可以作为结构体字段类型使用:

struct Foo {
    speaker Speaker //接口类型字段
    speakers []Speaker //接口类型数组字段
}   

接口参数类型判断

可以使用is关键字,对接口参数的具体类型进行判断

fn perform(s Speaker) {
    if s is Dog { //通过is关键字,判断接口类型是否是某一个具体类型
        println('s is Dog')
    }

    println(s.speak())
}
上一篇下一篇

猜你喜欢

热点阅读