Scala中的模糊导入

Ale*_*lex 7 import scala

我正在Scala中编写一个小型模拟程序.它是基于actor的,所以我创建了一个文件messages.scala,其中包含系统中有效的所有消息.

除此之外,我有一个管理组件,management.scala以及一个定义节点和链接类的文件nodes.scala.管理和节点文件import sim.messages._,然后管理,import sim.nodes._因为它需要能够从该文件实例化事物.

问题来自一个和Tick两个使用的消息类型.编译管理组件后,我得到:management.scalanodes.scala

error: reference to Tick is ambiguous;
it is imported twice in the same scope by
import sim.nodes._
and import sim.messages._
Run Code Online (Sandbox Code Playgroud)

我尝试删除管理组件中的消息导入,因为它们显然已经导入到此范围,但后来又找不到它们了.想法?

ped*_*rla 10

尝试

import sim.nodes._
import sim.nodes.{ Tick => NodesTick }
Run Code Online (Sandbox Code Playgroud)

和/或

import sim.messages._
import sim.messages.{ Tick => MessagesTick }
Run Code Online (Sandbox Code Playgroud)

当然,您必须Tick使用正确的引用重命名引用.

  • 从你的想法中获取灵感,我想出了"import sim.messages._"和"import sim.nodes.{Tick => _,_}"似乎通过将Tick分配给任何东西然后导入其余部分来完成这个技巧.这似乎是这样做的合适方式,因为根据我刚刚阅读的内容,一旦导入某些内容,它就无法撤消.因此,在两个步骤中执行它导入我不想要的Tick定义,然后我将在另一个别名下再次导入它.无论如何,现在排序,谢谢你的帮助. (2认同)