【发布时间】:2021-02-21 08:22:02
【问题描述】:
为什么这段代码有效:
val f: String => Unit = {(_:String) => 2}
//or more succinctly
val f: String => Unit = _ => 2
显然我的函数体返回一个 int。但是预期的类型是 Unit
如果我这样做了
implicitly[String <:< Unit]
//Cannot prove that String <:< Unit.
因此,我对演员阵容是如何发生的有点困惑?为什么一开始就允许这样做
【问题讨论】:
-
你的函数不返回 Int,编译器会处理它
-
我的函数不返回 Int 是什么意思?显然,我的功能主体确实如此。这里有一个无法解释的打字,我想理解。
-
基本上编译器会像这样重写你的代码
_ => { 2; () }这被称为值丢弃,在规范中指定,如果你不喜欢它可以禁用它(对于纯 FP 代码这是一场噩梦,但对于命令式代码这非常有用) -
如何禁用它?有什么办法,没找到....
-
@MaatDeamon 也许是
-Wvalue-discard/-Ywarn-value-discard和-Xfatal-warnings。 docs.scala-lang.org/overviews/compiler-options/index.html