剥掉Scala的糖衣(11) -- structural types
Structural types,中文怎么翻译不确定。我们可以用它来实现类似于鸭子类型的效果。为什么说是“类似”鸭子类型呢?稍后会说到它和鸭子类型的区别。
举一个例子,看看它都可以做什么:
1 | def makeNoise(quacker: {def quack(): String}) = quacker.quack |
声明一个方法,叫做makeNoise,接受什么类型的参数呢?不做严格限制,我们只声明说参数必须有一个叫做quack的方法,该quack方法返回值类型为String。然后在makeNoise方法内调用quack方法。请注意我们并没有声明一个含有quack方法签名的接口或者类,我们仅仅是在声明参数的同时声明我们期待参数含有什么样的成员。
然后我们声明一个Duck类:
1 | class Duck { |
