2012-03-20 2 views
1

私はargs.foreach(arg => println(arg))を見たことがありますが、私が文書http://www.scala-lang.org/api/current/index.html#scala.Arrayを検索すると、私はそこにそれとその仲間のオブジェクトのdocを見つけることはありません。スカラーAPIドキュメントの使い方は?

アドバイスはありますか? おかげ

+4

[scalex](http://scalex.org/?q=Array+foreach)は、このような場合に役立ちます。 – 4e6

+0

これはこのサイトの私の最初のScalaの質問でした... http://stackoverflow.com/questions/6131309/scala-arrays-vs-vectors。ドキュメントには、あらかじめ定義された暗黙的な方法から利用可能なすべてのメソッドを表示するオプションが必要です(または、それらを非表示にするオプションかもしれません)。 scalexはこれをしませんので、もしあなたが既に 'ArrayOps'に暗黙のうちにいることが分かっていない限りは役に立ちません。(その場合は、通常のAPIドキュメントを見てください) –

答えて

6

Arrayscala.collection.mutable.ArrayOpsからなforeachなどの操作を取得します - あなたは方法がアレイで利用できるものを見るために文書でArrayOpsを検索することができます。

Predefには、これらを配列で使用できるようにするための暗黙の変換メソッドが多数含まれています。

残念ながら、ArrayのScala APIのマニュアルでは、これらのメソッドがPredefという暗黙的な方法で利用可能であることはわかりません。

1

Jesperが述べたように、暗黙の変換によって取得されたメソッドに関するドキュメントを見つけるのは簡単ではありません。 Arrayに定義されているものとその背後にある論理的根拠については、hereで説明しています。

特定のメソッドがどこから来るかを知る一般的な方法(暗黙の変換から来る場合など)は、スカラーREPLの-printオプションを使用することです。

あなたがscala -printを実行する場合は、取得します:

scala> Array(1,2,3,4) 
// ..... omitted for brevity 
res0: Array[Int] = Array(1, 2, 3, 4) 

scala> res0 foreach (println) 
[[syntax trees at end of cleanup]]// Scala source: <console> 
package $line2 { 
    final object $read extends java.lang.Object with ScalaObject { 
    def this(): object $line2.$read = { 
     $read.super.this(); 
    () 
    } 
    }; 
    @SerialVersionUID(0) final <synthetic> class $read$$iw$$iw$$anonfun$1 extends 
scala.runtime.AbstractFunction1 with Serializable { 
    final def apply(x: java.lang.Object): Unit = scala.this.Predef.println(x); 
    final <bridge> def apply(v1: java.lang.Object): java.lang.Object = { 
     $read$$iw$$iw$$anonfun$1.this.apply(v1); 
     scala.runtime.BoxedUnit.UNIT 
    }; 
    def this(): anonymous class $read$$iw$$iw$$anonfun$1 = { 
     $read$$iw$$iw$$anonfun$1.super.this(); 
    () 
    } 
    }; 
    final object $read$$iw$$iw extends java.lang.Object with ScalaObject { 
    private[this] val res1: scala.runtime.BoxedUnit = _; 
    <stable> <accessor> def res1(): Unit =(); 
    def this(): object $line2.$read$$iw$$iw = { 
     $read$$iw$$iw.super.this(); 
     $read$$iw$$iw.this.res1 = { 
     scala.this.Predef.intArrayOps($line1.$read$$iw$$iw.res0()).foreach({ 
      { 
      (new anonymous class $read$$iw$$iw$$anonfun$1(): Function1) 
      } 
     }); 
     scala.runtime.BoxedUnit.UNIT 
     }; 
    () 
    } 
    }; 
    final object $read$$iw extends java.lang.Object with ScalaObject { 
    def this(): object $line2.$read$$iw = { 
     $read$$iw.super.this(); 
    () 
    } 
    } 
} 

[[syntax trees at end of cleanup]]// Scala source: <console> 
package $line2 { 
    final object $eval extends java.lang.Object with ScalaObject { 
    @volatile protected var bitmap$0: Int = 0; 
    <stable> <accessor> lazy def $result(): Unit = { 
     if ($eval.this.bitmap$0.&(1).==(0)) 
     { 
      $eval.this.synchronized({ 
      if ($eval.this.bitmap$0.&(1).==(0)) 
       { 
       { 
        $eval.this.$print(); 
        $line2.$read$$iw$$iw.res1() 
       }; 
       $eval.this.bitmap$0 = $eval.this.bitmap$0.|(1); 
       () 
       }; 
      scala.runtime.BoxedUnit.UNIT 
      }); 
     () 
     }; 
    () 
    }; 
    private[this] val $print: java.lang.String = _; 
    <stable> <accessor> def $print(): java.lang.String = $eval.this.$print; 
    def this(): object $line2.$eval = { 
     $eval.super.this(); 
     $eval.this.$print = { 
     $line2.$read$$iw$$iw; 
     "" 
     }; 
    () 
    } 
    } 
} 

1 
2 
3 
4 

あなたは、このコードの中.foreachを探している場合は、この方法は、実際にintArrayOpsで呼び出されるかを示します該当する行、わかります:

scala.this.Predef.intArrayOps($line1.$read$$iw$$iw.res0()).foreach(
関連する問題