Scala конфликтующие унаследованные имена методов - PullRequest
3 голосов
/ 10 ноября 2011

Я пытаюсь написать код для проверки модели базы данных. И инфраструктура тестирования, и структура базы данных используют оператор "===", и инфраструктуре теста отдается предпочтение. Как я могу явно использовать один метод или другой?

Пример:

import org.scalatest.FunSuite

class TestDBModels extends FunSuite{
  test("Test DoublePropertyEntry with a few new values") {
    Schemas.doubleProperties.deleteWhere(p => (p.id === p.id)))
  }
}

Ошибка:

type mismatch;
found   : Option[String]
required: org.squeryl.dsl.ast.LogicalBoolean
Schemas.doubleProperties.deleteWhere(p => (p.===(p.id, p.id)))

1 Ответ

3 голосов
/ 10 ноября 2011

У вас есть несколько вариантов.Первый и самый простой - использовать явный вызов метода вместо неявного преобразования.Например, чтобы явно использовать scalatest ==::

Schemas.doubleProperties.deleteWhere(p => (convertToEqualizer(p.id) === p.id)))

Если это слишком долго, вы можете сократить имя:

def toEq(left: Any) = convertToEqualizer(left: Any)
Schemas.doubleProperties.deleteWhere(p => (toEq(p.id) === p.id)))

convertToEqualizer - это метод неявного преобразования для scalatest,Еще один вариант - переопределить convertToEqualizer как неявный метод:

override def convertToEqualizer(left: Any) = new Equalizer(left)

Это останавливает это конкретное неявное преобразование.См. самая масштабная документация для объекта Assertions и тот же вопрос в списке рассылки самых крупных пользователей .

...