2013-06-19 5 views
1

Я читаю учебник по следующей ссылке: http://www.smartjava.org/content/tutorial-getting-started-scala-and-scalatra-part-iiiScala использование унарный оператор в этом примере

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

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 и *? Достаточно ли здесь контекста, чтобы понять, или ~ неявное значение, которое я где-то не вижу?

+0

Возможный дубликат: http://stackoverflow.com/q/17156582/1333025 –

ответ

0

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

columnA.~(columnB) 
Смежные вопросы