我正在编写一个扩展的类,Scanners迫使我定义类型Token:
object MyScanner extends Scanners {
type Token = ...
}
Run Code Online (Sandbox Code Playgroud)
问题是我的令牌类本身被调用Token:
abstract class Token(...)
case class Literal(...)
...
Run Code Online (Sandbox Code Playgroud)
它是在斯卡拉在某种程度上可以定义类型Token的Scanners,以我的Token课吗?
type Token = Token 显然不起作用.
我也尝试使用整个包名(以...开头main.scala),如下所示:
type Token = main.scala....Token
Run Code Online (Sandbox Code Playgroud)
这是另一个名称冲突,因为我在main里面定义了一个函数MyScanner.
我目前的解决方案是重命名我的令牌类.还有另一个我可以保留初始名称吗?
使用完全限定的类名定义令牌类型.要避免名称与main方法发生冲突,可以使用根前缀表示您引用的是完全限定的类型名称,而不是相对类型名称和方法名称.例如:
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 = ???
}
Run Code Online (Sandbox Code Playgroud)
其他一些选择包括:
import main.scala.{Token => MyToken}.