まだ理解が浅いせいか、Scalaでimplicit defを使っていて、ちょっと不思議な挙動に出くわしました。
次のようなコードを実行します。
object test extends Application { var count = 0 implicit def declare(property: String) = { class A { def plus(a: Int):A = { count = count + a; this } } new A } "a" plus 1 plus 1 plus 1 println(count) }
"a"はimplicit defにかかり、Aを返します。 その後、そのオブジェクトに対してplus 1を3回実行しています。 というか、そのつもりです。
結果は、7と表示されます。
"a" plus 1 plus 1 plus 1
の部分を以下のようにすると、
var a = "a" plus 1 a plus 1 a plus 1
期待通り3が出力されます。
デバッガで追いかけても、確かに"plus 1"の回数をnとすると、関数plusが2^n-1回実行されているようです。
う~ん、不思議。
匿名
画面が真っ暗、でもカーソルは出てる状況。
探して、ここにたどり着きました。
パスワード入力で、復活!
修理に出す寸前でした。ホントにありがとう!