私はSlickからSlick 2に移行中です。Slick2では、ケースクラスに投影するときにtupled
メソッドを使用することを意図しています(ここに示すように http:// slick。 typesafe.com/doc/2.0.0-RC1/migration.html )
問題は、ケースクラスにコンパニオンオブジェクトがある場合です。つまり、このようなものがある場合
case class Person(firstName:String,lastName:String) {
}
コンパニオンオブジェクトとともに
object Person {
def something = "rawr"
}
同じスコープで、tupled
メソッドは、case class
ではなくtupled
でobject
を実行しようとしているため、機能しなくなりました。
Person
ではなくobject
のcase class
を取得する方法はあるので、tupled
を正しく呼び出すことができますか?
あなたも書くことができます
(Person.apply _).tupled
タイプの繰り返しを避けるため。
これはAlexey Romanovが言ったことに非常に似ていますが、apply
が必要なときにtupled
を持ち上げないようにするために、コンパニオンオブジェクトに追加するだけです。
object Person {
def something = "rawr"
def tupled = (Person.apply _).tupled
}
これで、コンパニオンオブジェクトがない場合と同じようにPerson.tupled
を呼び出すことができます。
1つの回避策は、次のようにコンパニオンオブジェクトを定義することです。
object Person extends((String,String) => Person) {
...
}
見る。 https://groups.google.com/d/msg/scala-user/jyWBMz5Qslw/Bryv4ftzRLgJ
Tupleがケースクラスに対して生成されたデフォルトのapplyメソッドを呼び出しているので、他のコメントのいくつかに基づいて次のことも実行できます。
object Person {
...
def tupled = (this.apply _).tupled
}