Scala “接收”;缺少参数类型“;对函数文本的输入参数使用下划线时
我有一个带有泛型参数的Scala “接收”;缺少参数类型“;对函数文本的输入参数使用下划线时,scala,parameters,function-literal,Scala,Parameters,Function Literal,我有一个带有泛型参数的trait,其中包含一个我试图将默认实现定义为“空”的方法 但是,我不喜欢客户端现在必须将其函数包装在Some()中。我更愿意允许他们不指定参数,或者在没有包装器的情况下指定参数 非常感谢您的指导。实际上,它在V参数方面有问题 这里是-Ylog:typer-Ytyper-debug | | | | | |-- ((x$1) => ()) : pt=FB[T,?] => Unit BYVALmode-EXPRmode (site: v
trait
,其中包含一个我试图将默认实现定义为“空”的方法
但是,我不喜欢客户端现在必须将其函数包装在Some()
中。我更愿意允许他们不指定参数,或者在没有包装器的情况下指定参数
非常感谢您的指导。实际上,它在
V
参数方面有问题
这里是-Ylog:typer-Ytyper-debug
| | | | | |-- ((x$1) => ()) : pt=FB[T,?] => Unit BYVALmode-EXPRmode (site: value g in MB)
<console>:13: error: missing parameter type
trait MB[T <: Throwable] { def f[V](g: FB[T, V] => Unit = _ => ()): Unit = () }
^
| | | | | | \-> <error> => Unit
这项工作:
scala> trait MB[T <: Throwable, V] { def f(g: FB[T, V] => Unit = _ => ()): Unit = () }
defined trait MB
与默认参数类型相关的其他链接:
实际上,它在
V
参数上有问题
这里是-Ylog:typer-Ytyper-debug
| | | | | |-- ((x$1) => ()) : pt=FB[T,?] => Unit BYVALmode-EXPRmode (site: value g in MB)
<console>:13: error: missing parameter type
trait MB[T <: Throwable] { def f[V](g: FB[T, V] => Unit = _ => ()): Unit = () }
^
| | | | | | \-> <error> => Unit
这项工作:
scala> trait MB[T <: Throwable, V] { def f(g: FB[T, V] => Unit = _ => ()): Unit = () }
defined trait MB
与默认参数类型相关的其他链接:
可能与FailureBase的差异有关。无论如何,您都可以
((_u:Any)=>()
。默认参数可能有其他危险:这是票据。“defaultarggetter”的类型可能是问题所在。不推断“最广泛的有效类型”的一个原因是:给定\uf.f
,很难搜索提供缺少成员的所有可能的隐式转换。很难解释应用了哪些转换。好的,在这些行上,这段代码:val x=..toString
也应该编译,因为toString
在Scala中的所有对象上都可用。因此,编译器应该推断出\uu
的LUB,因为任何都可能与FailureBase的方差有关。无论如何,您都可以((_u:Any)=>()
。默认参数可能有其他危险:这是票据。“defaultarggetter”的类型可能是问题所在。不推断“最广泛的有效类型”的一个原因是:给定\uf.f
,很难搜索提供缺少成员的所有可能的隐式转换。很难解释应用了哪些转换。好的,在这些行上,这段代码:val x=..toString
也应该编译,因为toString
在Scala中的所有对象上都可用。因此,编译器应该将\uuu
的LUB推断为任何
极好的答案!谢谢你这么彻底。我知道你已经把它放在了原始帖子的评论中了,但是…你介意在你的答案中加一个旁注吗(如果你愿意的话,在底部)关于你为报道这件事而打开的罚单?这意味着阅读答案的人将拥有所需的所有上下文,以了解他们为什么在这个切线上,并且将来可能会根据票据在Scala编译器中进行修复。回答得好!谢谢你这么彻底。我知道你已经把它放在了原始帖子的评论中了,但是…你介意在你的答案中加一个旁注吗(如果你愿意的话,在底部)关于你为报道这件事而打开的罚单?这意味着阅读答案的人将拥有所需的所有上下文,以了解他们为什么在这个切线上,并且将来可能会根据票据在Scala编译器中进行修复。Tysvm。
scala> trait MB[T <: Throwable, V] { def f(g: FB[T, V] => Unit = _ => ()): Unit = () }
defined trait MB
scala> trait MB[T <: Throwable] { def f[V](g: FB[T, V] => Unit = _ => ()): Unit = () }
<console>:13: error: missing parameter type
trait MB[T <: Throwable] { def f[V](g: FB[T, V] => Unit = _ => ()): Unit = () }
^
scala> trait MB[T <: Throwable] { def f[V](g: FB[T, V] => Unit = (_: Any) => ()): Unit = () }
defined trait MB