読者です 読者をやめる 読者になる 読者になる

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)
                ^