質問
私は私の最初のサンプルの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され、その結果を、印刷します。
所属していません StackOverflow