Scala与继承的方法名称冲突

时间:2011-11-10 11:56:30

标签: scala testing namespaces scalatest

我正在尝试编写一些代码来测试数据库模型。测试框架和数据库框架都使用“===”运算符,并且优先考虑测试框架。我如何明确使用一种方法或另一种方法?

示例:

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 个答案:

答案 0 :(得分:3)

您有很多选择。第一个也是最简单的方法是使用显式方法调用而不是隐式转换。例如,要明确使用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)

这会停止发生此特定的隐式转换。请参阅scalatest documentation for Assertions objectsame question on the scalatest-users mailing list