我见过args.foreach(arg => println(arg)),但是当我搜索文档http://www.scala-lang.org/api/current/index.html#scala.Array。我在那里找不到它的伴侣对象文档。如何使用scala api文件?
有什么建议吗? 感谢
我见过args.foreach(arg => println(arg)),但是当我搜索文档http://www.scala-lang.org/api/current/index.html#scala.Array。我在那里找不到它的伴侣对象文档。如何使用scala api文件?
有什么建议吗? 感谢
正如Jesper所说,找到通过隐式转换获取的方法的文档并不是很容易。 为Array定义的那些及其背后的基本原理解释为here。
一个(不是特别方便...)找出其中一个特定的方法来自(在你们这样的情况下,它从何而来的隐式转换)的一般方法是使用Scala的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 2012-03-20 18:37:16
这是我在这个网站上的第一个Scala问题... http://stackoverflow.com/questions/6131309/scala-arrays-vs-vectors。文档确实需要一个选项来显示从预定义的含义中可用的所有方法(或者,可以选择*隐藏它们)。 scalex不会这样做,除非你已经知道'ArrayOps'有一个隐含的含义(在这种情况下,你可以查看正常的API文档) – 2012-03-20 19:19:58