A1类型的神秘成员“默认”=> B1

时间:2014-02-22 14:10:44

标签: scala namespaces

这是一个奇怪的情况,其中方法参数名称显然被另一个A1 => B1类型的符号(哪一个?)遮蔽:

object OddBug extends scala.swing.Action(null) {
  def apply() = ()

  def foo(default: String): scala.swing.Component = {
    val res = new scala.swing.TextField(16)
    res.listenTo(res)
    res.reactions += {
      case scala.swing.event.EditDone(_) =>
        if (res.text.isEmpty) res.text = default  // !
    }
    res
  }
}

编译器说:

[error]  ...: type mismatch;
[error]  found   : A1 => B1
[error]  required: String
[error]         if (res.text.isEmpty) res.text = default
[error]                                          ^

这是编译器中的错误(Scala 2.10.3)吗?由于我可以在反应之外引用default,我怀疑这是PartialFunction的问题。


解决方法如下:

  def foo(default: String): scala.swing.Component = {
    val res = new scala.swing.TextField(16)
    res.listenTo(res)
    def fixDefault: String = default
    res.reactions += {
      case scala.swing.event.EditDone(_) =>
        if (res.text.isEmpty) res.text = fixDefault
    }
    res
  }

1 个答案:

答案 0 :(得分:0)

根据@ travis-brown,这可能是去除部分函数文字的泄漏。提交为SI-8329