scalaのthis補助コンストラクタに関して
scalaのthis補助コンストラクタに関してご教授ください。
scalaのthis補助コンストラクタは、関数の先頭でそれより前に定義された別のコンストラクタを呼び出す必要があります。
例えば次のhoo関数がそうです。
class hoo(val x: Int, val y: Int){
def this(x: Int){
this(x, x+1) /* ここで前のコンストラクタを呼び出す*/
}
}
ここであえて、hoo関数と意味上は等価なbar関数を作りたいと思います。
class bar(val x: Int, val y:Int){
def this(x: Int){
val y = x + 1 /*コンパイルエラー*/
this(x, y)
}
}
valが再代入が不可能な以上、hoo関数とbar関数は同じものに思えます。
しかしながら、hoo関数はコンパイルが通り、bar関数はコンパイルが通りません。
理由は仕様のためと判っていますが、同じ意味を持つ二つの関数が、表記の違いだけで、片方はコンパイルが通り、もう片方はコンパイルエラーになるというのは、私には不思議に思われます。
何故、Scalaではこのような仕様になっているのでしょうか?
よろしくお願いいたします。
===========================================================================
[以下、追記]
質問の仕方が悪かったようなので、少し補足させていただきたいと思います。
thisコンストラクタにおいて、一行目で自身のコンストラクタを呼び出さなければならない言語仕様(制約)は知っています。
私が知りたいのは、何故、そのような制約があるのか、ということです。
何の理由もなくそのような制約が出来たとは考えづらいので、何らかの理由があるのだとは思いますが、その理由が私には皆目見当も付きません。
理由をごそんじの方、ご教授よろしくお願いいたします。