Scalaはコンストラクタもカリー化できる!
タイトル通りなのですが、Scalaではコンストラクタもカリー化できます。
scala> class Person(val name: String)(val age: String) defined class Person
だからといって、一部の引数を指定したコンストラクタを取得する方法がない (見つけれていない。あったら教えてください!) ので、あまり使い道はない気がします・・・。
scala> val p1 = new Person("rabitarochan")(24) p1: Person = Person@603d2b3 scala> val p2 = new Person("rabitarochan") _ <console>:8: error: missing arguments for constructor Person in class Person val p2 = new Person("rabitarochan") _
javapの結果は・・・
javap をしてみると、普通のコンストラクタとして定義されていました。
D:\>javap Person Compiled from "Person.scala" public class Pesron extends java.lang.Object{ public java.lang.String name(); public int age(); public Person(java.lang.String, int); }
だからといって、カリー化ではないコンストラクタではインスタンス化することはできません。
scala> val p3 = new Person("rabitarochan", 24) <console>:8: error too many arguments for constructor Person: (name: String)(age: Int)Person val p3 = new Person("rabitarochan", 24) ^