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をつくって解決した、とかいってるがさっぱりわからないまま。