Использование унарного оператора Scala в этом примере

Я читаю учебник по следующему URL-адресу: http://www.smartjava.org/content/tutorial-getting-started-scala-and-scalatra-part-iii

Вот фрагмент кода:

class BidRepository extends RepositoryBase {

  object BidMapping extends Table[(Option[Long], Long, Double, Double, String, Long, Long)]("sc_bid") {
      def id = column[Option[Long]]("id", O PrimaryKey)
      def forItem = column[Long]("for", O NotNull)
      def min = column[Double]("min", O NotNull)
      def max = column[Double]("max", O NotNull)
      def currency = column[String]("currency")
      def bidder = column[Long]("bidder", O NotNull)
      def date = column[Long]("date", O NotNull)

      def noID = forItem ~ min ~ max ~ currency ~ bidder ~ date
      def * = id ~ forItem ~ min ~ max ~ currency ~ bidder ~ date
  }

Что я не могу понять, так это то, для чего здесь используется ~? Что именно происходит при вызове методов noID и *? Достаточно ли здесь контекста, чтобы понять, или ~ является неким неявным значением, которое я где-то не вижу?


person randombits    schedule 19.06.2013    source источник
comment
Возможный дубликат: stackoverflow.com/q/17156582/1333025   -  person Petr    schedule 19.06.2013


Ответы (1)


В этом примере тильда — это комбинатор, означающий объединение результатов из двух столбцов. При постоянном объединении в цепочку, как для *, это означает возврат результата, который представляет собой все эти столбцы вместе как один объект результата. Это означает, что в этих классах столбцов есть функция с именем ~, и вы используете инфиксную нотацию и вызываете ее. На самом деле это больше похоже на;

columnA.~(columnB)
person cmbaxter    schedule 19.06.2013