比较来自世界各地的卖家的域名和 IT 服务价格

了解为什么 "pimp my library" 以这种方式定义了 Scala

如果我想在类中添加一种方法 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
}


编译器可以查看此定义并创建一个类。 FooOverride 用静态方法 newMethod, 哪个接收类型参数 Foo 并导致IT方法 bar. 这就是如何 Scala 实现功能。 我仍然需要导入包含覆盖的包 Foo, 用它。

似乎它包括较少的类型,不要求我发明名称并具有更好的性能。 /不导致方法并且不创建对象/. 可以在附加方法内完成隐式转换方法的所有内容。

我相信我错过了一些东西,我想了解它是什么。
已邀请:

二哥

赞同来自:

除了idiomas之外还有其他方法可以使用隐式变换 "pimp my library", 所以事实上并非如此 "他们为什么不这样做?", 和 "why didn't they do this as well?". 当然,我没有看到语法的原因 extension methods 正如您所建议的那样,它无法添加,并且他可能会有所清洁,但没有特别的迫切需要,鉴于语言已经支持实现相同效果的方式。

10月更新。 2011

:

有一个新的优惠添加语法Sugar用于此选项:
http://scala.github.com/sips/p ... .html

詹大官人

赞同来自:

如何防止此方法的输入到行动区域,无需显式导入并将其分配给名称? 事实上,作为一个程序可以知道已经添加了哪些方法,而不制定它?

当您使用三个不同的库时,其中两个将方法添加到第三个不兼容的方式,您将如何绕过此操作而不隐含控制?

此外,最好的性能是不可能的,因为 JVM 不允许您更改现有类。 最多,您可以从中受益于您不必创造一个名称并更少打印,而无需控制正在进行的内容。

作为最终注意事项,如果您想简要介绍,您可以执行以下操作:


implicit def fooBar/f: Foo/ = new { def newMethod = bar }

要回复问题请先登录注册