2012-03-20 16 views
1

我见过args.foreach(arg => println(arg)),但是当我搜索文档http://www.scala-lang.org/api/current/index.html#scala.Array。我在那里找不到它的伴侣对象文档。如何使用scala api文件?

有什么建议吗? 感谢

+4

[scalex](http://scalex.org/?q=Array+foreach)在这种情况下可以提供帮助。 – 4e6 2012-03-20 18:37:16

+0

这是我在这个网站上的第一个Scala问题... http://stackoverflow.com/questions/6131309/scala-arrays-vs-vectors。文档确实需要一个选项来显示从预定义的含义中可用的所有方法(或者,可以选择*隐藏它们)。 scalex不会这样做,除非你已经知道'ArrayOps'有一个隐含的含义(在这种情况下,你可以查看正常的API文档) – 2012-03-20 19:19:58

回答

6

Array获取操作,如foreachscala.collection.mutable.ArrayOps - 这样你就可以在文档中查找ArrayOps,看看有什么方法可以在阵列上。

Predef包含许多隐式转换方法,以使这些方法可用于数组。

不幸的是,您无法在Array的Scala API文档中看到这些方法可通过Predef中的暗示获得。

1

正如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(
相关问题