私はargs.foreach(arg => println(arg))を見たことがありますが、私が文書http://www.scala-lang.org/api/current/index.html#scala.Arrayを検索すると、私はそこにそれとその仲間のオブジェクトのdocを見つけることはありません。スカラーAPIドキュメントの使い方は?
アドバイスはありますか? おかげ
私はargs.foreach(arg => println(arg))を見たことがありますが、私が文書http://www.scala-lang.org/api/current/index.html#scala.Arrayを検索すると、私はそこにそれとその仲間のオブジェクトのdocを見つけることはありません。スカラーAPIドキュメントの使い方は?
アドバイスはありますか? おかげ
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(
[scalex](http://scalex.org/?q=Array+foreach)は、このような場合に役立ちます。 – 4e6
これはこのサイトの私の最初のScalaの質問でした... http://stackoverflow.com/questions/6131309/scala-arrays-vs-vectors。ドキュメントには、あらかじめ定義された暗黙的な方法から利用可能なすべてのメソッドを表示するオプションが必要です(または、それらを非表示にするオプションかもしれません)。 scalexはこれをしませんので、もしあなたが既に 'ArrayOps'に暗黙のうちにいることが分かっていない限りは役に立ちません。(その場合は、通常のAPIドキュメントを見てください) –