まず。次のコードを検討してください。scalacが追加/ラッピングクロージャを生成する理由
scala> val fail = (x: Any) => { throw new RuntimeException }
fail: Any => Nothing = <function1>
scala> List(1).foreach(fail)
java.lang.RuntimeException
at $anonfun$1.apply(<console>:7)
at $anonfun$1.apply(<console>:7)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
foreachと例外の間に追加のanonfunがあります。 1つはfail
(クラスFunction1 [])のオブジェクトですが、2番目の値はどこから来るのでしょうか?
foreach
署名は、この機能を取ります
def foreach[U](f: A => U): Unit
だから、何が第二1の目的は?彼らは本当に必要ない...二つの追加anonfunsあり
scala> def outer() {
| def innerFail(x: Any) = { throw new RuntimeException("inner fail") }
|
| Set(1) foreach innerFail
| }
outer:()Unit
scala> outer()
java.lang.RuntimeException: inner fail
at .innerFail$1(<console>:8)
at $anonfun$outer$1.apply(<console>:10)
at $anonfun$outer$1.apply(<console>:10)
at scala.collection.immutable.Set$Set1.foreach(Set.scala:86)
:
第二には、次のコードを考えてみ? :-E
Scalaバージョン2.9.2.rdev-2769-2011-12-13-g2dd83da(Java HotSpot(TM)64ビットサーバーVM、Java 1.6.0_25)。 – tuxSlayer