首页 > 代码库 > Scala Structural Typing结构类型
Scala Structural Typing结构类型
鸭子类型:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
一般在动态语言里面才有,因为静态语言是强类型的,会在编译期检查类型,很难实现。但是Scala作为一门static type语言,居然支持,不得不说Scala确实很强大。直接上code
package testscala object StructuralTyping extends App { def quacker(duck: {def quack(value: String): String}) { println(duck.quack("Quack")) } object BigDuck { def quack(value: String) = { value.toUpperCase } } object SmallDuck { def quack(value: String) = { value.toLowerCase } } object IamNotReallyADuck { def quack(value: String) = { "prrrrrp" } } quacker(BigDuck) quacker(SmallDuck) quacker(IamNotReallyADuck) // object NoQuaker { // } // // quacker(NoQuaker) // 编译错误!!!! val x = new AnyRef { def quack(value: String) = { "No type needed " + value } } quacker(x) }
Why scala uses reflection to call method on structural type?
"。当然里面说性能差事反射的性能问题,随着JVM引入invokedynamic 指令,会有很大的性能提升,但是这只在JVM1.7才有,但是scala2.11还支持JVM1.6, 所以最好还是不要大量使用,当然目前貌似也没有太多使用的,可以看这篇文章“
Why No One Uses Scala’s Structural Typing
”
Ref
1. http://en.wikibooks.org/wiki/Scala/Structural_Typing
2. http://java.dzone.com/articles/duck-typing-scala-structural
3. http://www.draconianoverlord.com/2011/10/04/why-no-one-uses-scala-structural-typing.html
4. http://stackoverflow.com/questions/8539422/why-scala-uses-reflection-to-call-method-on-structural-type
Scala Structural Typing结构类型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。