Scala:下划线的另一种用法?

3

我正在研究scala actors库,其中我发现了以下代码:

private[scheduler] trait TerminationMonitor { 
    _: IScheduler =>

    protected var activeActors = 0 
    ...

问题是_:IScheduler =>在这里的含义是什么?我刚开始学习Scala,对于下划线有很多不同的含义感到困惑。谢谢您的帮助!

2
可能是What does "outer =>" really mean?Explicit self-references with no type / difference with ''this''的重复问题。唯一的区别是这里使用下划线来命名自引用,这意味着忘记名称。 - kiritsuku
1
发现这个链接http://www.slideshare.net/normation/scala-dreaded,其中提到了SO。 - octopusgrabbus
感谢提供有用的链接!这些下划线真的让我疯狂 :/ - K J
1个回答

5

下划线的使用方式与以下情况类似:

someElem match {
  case _: String => doSomething()
}

val k = (_: Int) => "This does not use the Int argument."

val (m, _, o) = (1,2,3)

它是一个语法占位符,用于标识(变量),随后立即被丢弃。

在您的示例中,因此避免了自身类型的命名。(但由于自身类型引用始终可通过this访问,因此在这种特殊情况下,写成this:IScheduler =>是等效的。)


谢谢你的回答,Debilski。我不知道自类型声明。 :/ - K J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接