我正在编写一个从Scanners
延伸的类,这迫使我定义类型Token
:
object MyScanner extends Scanners {
type Token = ...
}
问题是我的令牌类本身被称为Token
:
abstract class Token(...)
case class Literal(...)
...
Scala能以某种方式为我的Token
类定义Scanners
的{{1}}类型吗?
Token
显然不起作用。
我也试过使用整个包名(以type Token = Token
开头),如下所示:
main.scala
这是另一个名称冲突,因为我在type Token = main.scala....Token
内定义了main
函数。
我目前的解决方案是重命名我的令牌类。还有另一个我可以保留初始名称吗?
答案 0 :(得分:6)
使用完全限定的类名定义令牌类型。要避免名称与main方法发生冲突,可以使用 root 前缀表示您引用的是完全限定的类型名称,而不是相对类型名称和方法名称。例如:
package main
import scala.util.parsing.combinator.lexical._
case class Token(s: String)
object MyScanner extends Scanners {
type Token = _root_.main.Token
val Token = _root_.main.Token
def errorToken(msg: String) = Token(msg)
def token = ???
def whitespace = ???
def main = ???
}
其他一些选择包括:
import main.scala.{Token => MyToken}
。