質問

私は私の最初のサンプルのScalaプログラムを書き、それがこのようになります:

def main(args: Array[String]) {     
    def f1 = println("aprintln")
    println("applying f1")
    println((f1 _).apply)
    println("done applying f1")
}

が出力される

applying f1
aprintln
()
done applying f1

)(エクストラが表示された理由を誰かが説明できますか?私はちょうどaprintln現れるだろうと思っています。

おかげで、

ジェフ

役に立ちましたか?

解決

この問題を修正します。

def main(args: Array[String]) {         
    def f1 = println("aprintln")
    println("applying f1")
    (f1 _).apply
    println("done applying f1")
}

ですから、これを意志ます:

def main(args: Array[String]) {         
    def f1 = "aprintln"
    println("applying f1")
    println((f1 _).apply)
    println("done applying f1")
}

何ここで起こっていることは、あなたがf1への呼び出しで、関数applyを実行しているです。関数f1は「aprintln」を出力し、かつ()を返します。その後、f1に別のコールに()あるprintlnの出力を、渡します。あなたがコンソール上paransの余分なペアを参照してください理由です。

空のカッコは、Javaで無効に相当する、Scalaで型ユニットを持っています。

他のヒント

Javaでのボイドの戻り値の型を持っているでしょう。

メソッドは、Scalaではユニットの戻り値の型を持っています。 ()あなたは単位の値を書き込む方法です。

あなたのコードでは、F1の呼び出しが直接printlnを。あなたはF1を呼び出し、printlnをしてその結果を渡すときに、あなたの両方がf1のボディに文字列を印刷し、)(とtostring'edされ、その結果を、印刷します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top