微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Scala特征与C概念之间的区别

Scala traits Haskell类型类和C 0x Concepts之间有什么区别?

就像下面这个例子中Observer声明一个抽象成员receiveUpdate一样
观察者实际上是“匿名”类型或结构类型.

package observer
trait Subject {
   type Observer = { def receiveUpdate(subject: Any) }
   private var observers = List[Observer]()
   def addobserver(observer:Observer) = observers ::= observer
   def notifyObservers = observers foreach (_.receiveUpdate(this))
}

解决方法

>概念不会出现在C 0x中,它们已在草案规范的最后几个版本中被删除.
>类型类最初设计用于参数多态的有界量化(通用约束,“forall x使得x是……”)以及为较少广告提供完全类型推断语言的ad-hoc多态的机制特别的方式.
>概念也用于参数多态的有界量化,并提供概念重载,这弥补了C中模板函数缺乏部分特化.它们最初设计用于处理C中的模板错误消息问题.
>特征是混合行为的机制,不使用多重继承.

因此,只有两个有共同点,但不是很多,即Concepts和Type-classes.本文中已经对两者进行了比较:A comparison of C++ concepts and Haskell type classes

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐