【发布时间】:2013-10-27 07:49:24
【问题描述】:
StringOps 文档中有一个 Shadowed Implicit Value Members 部分。例如:
def split(arg0: String, arg1: Int): Array[String]
隐含信息
该成员是通过 scala.Predef 中的方法 unaugmentString 执行的从 StringOps 到 String 的隐式转换添加的。阴影
这个隐式继承的成员被这个类中的一个或多个成员遮蔽。 要访问此成员,您可以使用类型归属:(stringOps: String).split(arg0, arg1)定义类
字符串
但是当我尝试运行以下程序时:
"aaa bbb ccc".split(" ", 2) //> res0: Array[String] = Array(aaa, bbb ccc)
调用String.split(arg0: String, arg1: Int) 不需要像文档中描述的那样使用type ascription。
那么 Shadowed Implicit Value Members 指的是什么?我试图问谷歌,但找不到任何参考。
是不是有点像:
class A {
def foo() = println("foo")
}
class AOps(a: A) {
def bar() = println("bar")
def foo() = println("new foo")
def foo(i: Int) = println("foo %d".format(i))
}
object Program {
implicit def A2AOps(a: A) = new AOps(a) //> A2AOps: (a: A)AOps
val a = new A() //> a : A = A@15669ae
a.foo //> foo
a.bar //> bar
(a: AOps).foo //> new foo
a.foo(1) //> foo 1
}
那么String.split(...)和StringOps.split函数签名不同,就不需要“类型归属”了。
这就是“Shadowed Implicit Value Members”的含义吗?我有点疑惑。谢谢!
【问题讨论】:
标签: scala