6.2 duck typing的概念
一、duck typing的概念
duck typing的概念举个例子:玩具鸭是鸭子嘛
传统类型系统:锁门纲目科这类判别,不是(没有生命)
duck typing:外形像,像鸭子走路,叫声像,那就是鸭子
描述事务的外部行为,而非内部结构
严格说,Go语言属于结构化类型系统,类似
duck typing(不是动态绑定的系统结构)
二、其他语言中的duck typing
duck typingpython
def download(retriever): return retriever.get("https://imooc.com")备注:
需要运行时候才能判断传入的
retriever有没有get需要注释来说明接口
C++
template <class R> string download(const R& retriever) { return retriever.get("https://www.imooc.com") }备注:
通过模板来支持
编译时才能知道传入的
retriever有没有get需要注释来说明接口
Java
<R extends Retriever> String download(R r) { return r.get("http://www.imooc.com") }备注:
Java中没有
duck typing,只有类似的代码接口方式实现的
模板参数里面,一律使用extends
传入的参数必须实现Retriever接口
Go接口的想法
同时实现两个接口
同时具有python以及c++的
duck typing的灵活性又具有Java的类型检查
Last updated
Was this helpful?