gpt4 book ai didi

scala - 不带任何参数的高阶函数正在解析

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

为什么这是非法的:

def foobar() = {}

val option: Option[() => Unit] = Some(foobar)

鉴于这是合法的:
def foobar() = {}

val intermediate: () => Unit = foobar

val option: Option[() => Unit] = Some(intermediate)

在第一个示例中,编译器提示赋值的右侧是 Option[Unit] 类型而不是 Option[() => Unit]

我怀疑这与 foobar 被评估有关,而不是作为变量传递给 Some() ,但我不确定。

最佳答案

这是因为在评估空括号方法时括号是可选的。按照惯例,它们被排除在纯方法之外,但这只是惯例。所以你是对的,它实际上是在评估 foobar 而不是将它扩展为一个函数。您可以通过使用下划线运算符显式调用 eta 扩展来修复您的第一个示例:

val option: Option[() => Unit] = Some(foobar _)

关于scala - 不带任何参数的高阶函数正在解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25798989/

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