==
domaga equals
, ===
jest niestandardowy zdefiniowany sposób w gładkie, które wykorzystuje się do porównania kolumna:
def === [P2, R](e: Column[P2])(implicit om: o#arg[B1, P2]#to[Boolean, R]) =
om.column(Library.==, n, e.toNode)
Problem stosowania ==
obiektów jest następująco (z this question)
Domyślna implementacja klasy equals() podanej przez java.lang.Object porównuje lokalizację pamięci i zwraca wartość true, jeśli dwie zmienne referencyjne wskazują na to samo miejsce w pamięci, tzn. ponownie ten sam obiekt.
Oznacza to, że dwie zmienne muszą być skierowane do tego samego obiektu, aby być równe, na przykład:
scala> class A
defined class A
scala> new A
res0: A = [email protected]
scala> new A
res1: A = [email protected]
scala> res0 == res1
res2: Boolean = false
scala> val res2 = res0
res2: A = [email protected]
scala> res2 == res0
res4: Boolean = true
W pierwszym przypadku ==
zwraca false ponieważ res0
i res1
punkt do dwóch różnych obiektów, w drugi przypadek res2
jest równy res0
, ponieważ wskazują one na ten sam obiekt.
W gładkich kolumnach są wyodrębnione w obiektach, więc o column1 == column2
nie jest to, czego szukasz, chcesz sprawdzić równość dla wartości przechowywanych w kolumnie, a nie, jeśli wskazują na ten sam obiekt. Slick następnie prawdopodobnie tłumaczy, że ===
w równości wartości w AST (Library.==
jest SqlOperator("=")
, n
jest po lewej stronie kolumny i e
po prawej stronie), ale Christopher może wyjaśnić, że lepiej niż ja.
używam '= ~' i '= ! 'w miejsce' === 'i'! == ', jak również' | 'i' & 'zamiast' || 'i' && ', ale to wcale nie jest zgodne z konwencją, po prostu nie lubię hałaśliwych Składnia DSL ... – virtualeyes
Nie widzę odpowiedzi na pytanie o różnicę między metodami: '==' vs '==='. Co oferuje '===', że '==' nie może? Byłbym wdzięczny za wyjaśnienia. –
@JacekLaskowski masz rację. –