StringOps docには Shadowed Implicit Value Membersセクションがあります。例えば:
def split(arg0: 文字列、arg1: Int): 配列[文字列]
暗黙的な情報
このメンバーは、scala.Predef のメソッド unaugmentString によって行われる StringOps から String への暗黙的な変換によって追加されます。シャドウイング
この暗黙的に継承されたメンバーは、このクラスの 1 つ以上のメンバーによってシャドウイングされます。このメンバーにアクセスするには、型の割り当てを使用できます。(stringOps: String).split(arg0, arg1)
定義 クラス
文字列
しかし、次のプログラムを実行しようとすると:
"aaa bbb ccc".split(" ", 2) //> res0: Array[String] = Array(aaa, bbb ccc)
説明されているドキュメントのように、型の割り当てを使用する必要はString.split(arg0: String, arg1: Int)
ありません。
では、 Shadowed Implicit Value Memberは何を参照しているのでしょうか? Google に問い合わせてみましたが、参照が見つかりません。
それは次のようなものですか:
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 Member」の略ですか? 私は少し困惑しています。ありがとう!