scala-userMLのMultiple Constructorのスレッド

case class MyClass(param1 : String, param2 : String, param3 : String)
{
  def this(param1 : String, param2 : String) = this(param1, param2,
Utilitary.sign(param2));
}

Object Utilitary {
  def sign(param : String) : String = ... do some stuff with param and
return a string !
}

中の補助コンストラクタが別のを呼ぶよ、おかしいんじゃない?みたいなスレッドがあった。

(原文)
I'm trying to create a class with two constructors. However it looks
it doesn't work because the second constructor calls another function.

見た感じ、全然問題なさそうなので、REPLで試す、、、
バージョンは2.8.1.final

scala> object Utilitary {
     | def sign(param : String) : String = { param + " is signed"}
     | }
defined module Utilitary

scala> case class MyClass (param1 : String, param2 : String, param3 : String) {
     | def this(param1 : String, param2 : String) = this(param1, param2, Utilitary.sign(param2));
     | }
defined class MyClass

scala> val a = new MyClass("a", "b", "c")
a: MyClass = MyClass(a,b,c)

scala> val a = new MyClass("a", "b")
a: MyClass = MyClass(a,b,b is signed)

が、問題ない。

じゃあ、とコンパイラで試す。

case class MyClass(param1 : String, param2 : String, param3 : String)
{
  def this(param1 : String, param2 : String) = this(param1, param2,
Utilitary.sign(param2))
}

object Utilitary {
  def sign(param : String) : String = { "signed " + param + "..."}
}

object hoge extends Application {
  val a = new MyClass("a", "b", "c")
  println(a)
  val b = new MyClass("A", "B")
  println(b)
}

結果

$ scala hoge
MyClass(a,b,c)
MyClass(A,B,signed B...)

ぜんぜん問題なし、、、その後のメールのやり取りでFactoryをつくって解決した、とかいってるがさっぱりわからないまま。