[Scala][Slick]演算子周りがよくわからん

val t = (a ~ b ~ c ~ d) <> (X.apply _, X.unapply _)

 と

val s = a ~ b ~ c ~ d
val t = s <> (X.apply _, X.unapply _)

 って何が違うんだろう…Slickのテーブル定義でクエリ発行部分を記述するところです(a〜dはなんか適当なカラム(Column[U]))。前者の書き方だとSELECT文がちゃんと発行されるんですが、後者の書き方だと

scala.slick.SlickException: Select(TableNode, "id") found. This is typically caused by an attempt to use a "raw" table object directly in a query without introducing it through a generator.

 とか怒られてしまいます。

 "id"がどうのこうの言ってるので優先順位の問題かとも思ったんですが特に問題無さそうですし(括弧つけてるので)、コンパイルもちゃんと通ります。どちらの例も評価結果の型はMappedProjectionでした。誰かこの辺詳しく知ってる人いませんかね…

0 件のコメント :

コメントを投稿