2010-12-18 14 views
3

Ich lese die SQueryL documentation an der Aktualisierung und ich sah:Was macht der SQueryL Tilde-Operator?

update(songs)(s => 
    where(s.title === "Watermelon Man") 
    set(s.title := "The Watermelon Man", 
     s.year := s.year.~ + 1) 
) 

Ich hatte eine harte Zeit, um die ~ Methode aus dem SQueryL Quellcode und der verknüpfte Dokumentation zu finden, mir offensichtlich nicht sagen, was es entweder tut. Will jemand erklären?

+0

Die Dokumentation scheint unvollständig ... vielleicht versuchen Sie ihre Mailing-Liste? –

+0

Ich habe die Diskussionsgruppe gefragt, wie die Dokumentation gebrochen ist und ich bin neugierig. –

Antwort

4

Ich erinnere mich, Lesen über die Tilde-Operator nicht zu lange her auf der Schema Definition Page. Es geht darum, zwischen einem primitiven und einem benutzerdefinierten Typ zu disambiguieren, obwohl (wie ich gerade anfange, Scala zu lernen) es immer noch ein bisschen vage für mich klingt;). Um ein kleines Stück zu zitieren

...

wichtig: in PrimitiveTypes Modus Unklarheiten zwischen numerischen Operatoren

Bei der Verwendung von org.squeryl.PrimitiveTypeMode sein kann, wird der Compiler einen Ausdruck wie die Behandlung von eines im nächsten Beispiel als Boolean. . Die ~ Funktion benötigt wird, um den Compiler zu sagen, dass die linke Seite ist ein Knoten von TypedExpressionNode [Int], die der ganzen Ausdruck verursachen wird ein LogicalBoolean sein, das ist es, was das where-Klausel führt:

...

Hoffe, dass hilft.

+0

Ah ok. So scheint es, dass das ~ op von NumericalExpression kommt, die Sie von einer magischen impliziten Konvertierung von PrimitiveTypeMode erhalten, nachdem Sie ~ eingegeben haben. Der einzige Grund, warum Sie es brauchen, ist, weil Sie aufgrund der magischen Natur von implicits nie sicher wissen, wozu arithmetische/logische Operationen auflösen werden. Mit 'Plus' oder '~' wird sichergestellt, dass Sie den richtigen Typ erhalten. –