gpt4 book ai didi

scala - 了解为什么在Scala中以这种方式定义“pimp my library”

转载 作者:行者123 更新时间:2023-12-03 13:31:08 24 4
gpt4 key购买 nike

如果要向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 my library”这个习惯用法,因此并不是“为什么他们不这样做呢?”的真实案例,而是“他们为什么也没有这样做呢?” 。当然,我看不出没有任何理由不能像您建议的那样添加扩展方法语法,这可能会更简洁一些,但是鉴于该语言已经支持实现相同效果的方式,因此并没有太多迫切需要。

2011年10月更新:

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

关于scala - 了解为什么在Scala中以这种方式定义“pimp my library”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1913591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com