Scala重载方法解决问题。如何让编译器选择正确的方法?

时间:2014-02-10 14:06:02

标签: scala overloading

[error] both method addVertex in class OrientBaseGraph of type (x$1: Any, x$2: <repeated...>[Object])com.tinkerpop.blueprints.impls.orient.OrientVertex
[error] and  method addVertex in class OrientBaseGraph of type (x$1: Any)com.tinkerpop.blueprints.impls.orient.OrientVertex
[error] match argument types (String)
[error]         val npNode = g.addVertex(f"class:$NPPhrase")
[error]

如何让Scala选择我想要调用的方法(更具体的方法)?

哦,虽然在这种情况下g.addVertext(...,Nil)在语义上是等价的,但我仍然想知道如何解决上述问题。

1 个答案:

答案 0 :(得分:3)

编译器对你说对了。

addVertex(f"class:$NPPhrase")匹配addVertex(Any)addVertex(x$1: Any, x$2: Any*)。 这是因为x$2参数可能为空,您可以在调用addVertex(x$1: Any, x$2: Any*)时忽略它(如addVertex("whatever")

选项包括:

  1. 重命名其中一种方法。
  2. addVertex(x$1: Any, x$2: Any*)签名更改为addVertex(x$1: Any, x$2: Any, x$3: Any*),以便它仅处理包含2个或更多参数的调用。 (我假设您的addVertex(x$1: Any)addVertex(x$1: Any, x$2: Any*)对一个参数的行为相同)