gpt4 book ai didi

scala - 如何处理 Scala 中的类型名称冲突?

转载 作者:行者123 更新时间:2023-12-01 10:25:22 25 4
gpt4 key购买 nike

我正在编写一个从 Scanners 扩展的类,它强制我定义 Token 类型:

object MyScanner extends Scanners {
type Token = ...
}

问题是我的 token 类本身称为 Token:

abstract class Token(...)
case class Literal(...)
...

在 Scala 中是否可以通过某种方式将 ScannersToken 类型定义到我的 Token 类中?

type Token = Token 显然不行。

我还尝试使用整个包名称(以 main.scala 开头),如下所示:

type Token = main.scala....Token

这是另一个名称冲突,因为我在 MyScanner 中定义了一个 main 函数。

我目前的解决方案是重命名我的 token 类。有没有另一个我可以保留初始名称的地方?

最佳答案

使用完全限定的类名定义 token 类型是可行的。为避免名称与您的主要方法发生冲突,您可以使用 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 = ???
}

其他一些替代方案包括:

  1. 在 MyScanner 对象之外定义类型别名(在封闭对象或包对象中)。
  2. 导入您的 token 类并将其别名作为导入的一部分。例如:import main.scala.{Token => MyToken}

关于scala - 如何处理 Scala 中的类型名称冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15453247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com