gpt4 book ai didi

scala - 什么时候 scala 偏函数不是偏函数?

转载 作者:行者123 更新时间:2023-12-04 05:27:24 25 4
gpt4 key购买 nike

在创建 String 到部分函数的映射时,我遇到了意外行为。当我创建一个部分函数作为 map 元素时,它工作正常。当我分配给一个 val 时,它会改为调用。尝试调用检查会产生错误。这是预期的吗?我在做蠢事吗?注释掉 check()查看调用。我正在使用 Scala 2.7.7

def PartialFunctionProblem() = {
def dream()() = {
println("~Dream~");
new Exception().printStackTrace()
}
val map = scala.collection.mutable.HashMap[String,()=>Unit]()
map("dream") = dream() // partial function
map("dream")() // invokes as expected
val check = dream() // unexpected invocation
check() // error: check of type Unit does not take parameters
}

最佳答案

为方便起见,Scala 允许您在调用方法时省略空括号,但很聪明地看到第一种情况下的预期类型是 ()=>Unit ,因此它不会为您删除所有括号;相反,它会为您将方法转换为函数。

val check然而,它看起来就像一个函数调用结果被分配给一个变量。实际上,所有这三个都做完全相同的事情:

val check = dream
val check = dream()
val check = dream()()

如果你想把方法变成函数,你放置 _在方法之后代替参数列表。因此,
val check = dream() _

会做你想做的。

关于scala - 什么时候 scala 偏函数不是偏函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2871028/

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