2

PSSQ は、Possibly Stupid Scala Question の略です:)

Scala について少し理解し、必須の Hello World の例 (以下のコード) では、メイン関数への引数は文字列の配列です。

object HelloWorld
{
    def main(args: Array[String]): Unit = 
    {
        args.map((arg:String) => arg.toUpperCase());
        printf("%s %s!", "Hello", "World");
    }
}

この例ではmap()、配列に対して関数を使用しています。しかし、Scala API ドキュメントを確認すると、map()で使用できる関数の 1 つとしてリストされていませんArray。ある種の魔法が起こっているのでしょうか、それとも API ドキュメントに明らかな何かが欠けているのでしょうか?

4

2 に答える 2

3

これは、暗黙の変換と呼ばれる Scala の重要な機能の 1 つによるものです。ネット上にはそれらに関するドキュメントがたくさんあります。たとえば、次のドキュメントを参照してください。

今後の Scala 2.9 REPL は、ここに関係する可能性のあるものを見つけるのに役立ちます。

scala> :implicits -v

... Array を探していると、 に行くものがいくつか見つかりますmutable.ArrayOps。そのための scaladoc: http://www.scala-lang.org/archives/downloads/distrib/files/nightly/docs/library/scala/collection/mutable/ArrayOps.html

これは、暗黙的な変換メソッドrefArrayOpsがスコープ内にあるため (デフォルトでは)、 for ではなく forで定義されてPredefいるメソッドを呼び出そうとすると、scala は (暗黙的に) 変換を挿入するため、実際にはArrayArrayArrayOps

Predef.refArrayOps(args).map(...)
于 2011-04-12T18:38:40.380 に答える
1

簡単な答え:map実際には、Traversableによって含まれるトレイトのメソッドArrayです。

難しい答え:もはやArray実際には拡張されTraversableません (iirc) が、インスタンスでTraversableメソッドが呼び出されると、Arrayそれを機能させるために暗黙の変換が行われます。

于 2011-04-12T18:32:50.140 に答える