6

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」の略ですか? 私は少し困惑しています。ありがとう!

4

4 に答える 4

0

「aaa bbb ccc」は String オブジェクトであり、StringOps オブジェクトではないため、コメントは関係ありません。

これは、StringOps オブジェクトを明示的に作成することはおそらくなく、暗黙的な変換のみに依存するというまれなケースであるため、この Scaladoc のコメントは役に立たないように思えます。

于 2013-10-27T08:57:13.423 に答える