gpt4 book ai didi

scala - 为什么 scala 编译器允许不带参数调用 PartialFunction?

转载 作者:行者123 更新时间:2023-12-02 09:24:39 24 4
gpt4 key购买 nike

我对 scala 编译器允许编译这个相当奇怪、明显错误的代码这一事实感到有点失望:

val foo: PartialFunction[Any, Unit] = {
case s: String => println(s)
}
foo()

它不会打印编译错误,而是抛出

线程“main”scala.MatchError 中出现异常:()(属于 scala.runtime.BoxedUnit 类)

这是什么原因?

最佳答案

在您的情况下,您的部分函数采用 Any 参数,其中包括 Unit (因为单位是 Any - Any -> AnyVal -> Unit 的子类型)。对其调用 apply() 等同于调用 apply(())

如果您有一个接受Unit的部分函数,​​您会收到一条错误,表明缺少 apply 的参数:

scala> val foo : PartialFunction[AnyRef, Unit] = {
| case arg => println(s"arg = $arg")
| }
foo: PartialFunction[AnyRef,Unit] = <function1>

scala> foo()
<console>:13: error: not enough arguments for method apply: (v1: AnyRef)Unit in trait Function1.
Unspecified value parameter v1.
foo()

关于scala - 为什么 scala 编译器允许不带参数调用 PartialFunction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38871404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com