这是一个奇怪的情况,其中方法参数名称显然被另一个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
}