加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

了解为什么在“Scala”中定义了“pimp我的图书馆”

发布时间:2020-12-16 09:35:37 所属栏目:安全 来源:网络整理
导读:如果我想在Scala中为一个类添加一个方法,我需要做一些类似于 class RichFoo(f: Foo) { def newMethod = f.bar()}object RichFoo { implicit def foo2Rich(f: Foo) = new RichFoo(f)} 那么f.newMethod将导致创建RichFoo实例并调用它的方法。 我想了解为什么
如果我想在Scala中为一个类添加一个方法,我需要做一些类似于

class RichFoo(f: Foo) {
  def newMethod = f.bar()
}
object RichFoo {
  implicit def foo2Rich(f: Foo) = new RichFoo(f)
}

那么f.newMethod将导致创建RichFoo实例并调用它的方法。

我想了解为什么它不像Ruby那样定义:

override class Foo {
  def newMethod = bar
}

编译器可以查看此定义,并使用静态方法newMethod创建一个FooOverride类,该方法获取Foo类型的参数并调用其bar方法。这就是Scala如何实现特征。我仍然需要导入包含Foo覆盖的包来使用它。

它似乎涉及较少的打字,不需要我发明名称,并具有更好的性能(不调用方法和创建一个对象)。任何隐式转换方法都可以在附加方法中完成。

我确定我错过了一些东西,想要深入了解一下。

解决方法

除了“pimp我的图书馆”成语以外,还有其他用途的隐含转换,所以它不是真的“为什么他们不这样做”,而是“为什么他们也不这样做”? 。当然,我可以看到没有理由不能像你所说的那样添加一个扩展方法语法,而且它可能会更加清晰,但是由于语言已经支持一种实现相同效果的方法。

2011年10月更新:

有一个新的建议,为这个用例添加语法糖:http://scala.github.com/sips/pending/implicit-classes.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读