gpt4 book ai didi

scala - 在 Scala 中,为什么我不能在不明确指定参数类型的情况下部分应用函数?

转载 作者:行者123 更新时间:2023-12-03 08:04:53 25 4
gpt4 key购买 nike

这会产生一个匿名函数,正如您所期望的(f 是一个具有三个参数的函数):

f(_, _, _)

我不明白为什么这不能编译,而是给出“缺少参数类型”错误:
f(_, _, 27)

相反,我需要明确指定下划线的类型。考虑到函数 f 的参数类型是什么,Scala 不应该能够推断它们吗?

最佳答案

以下引用文献是 Scala Language Specification

考虑以下方法:

def foo(a: Int, b: Int) = 0

Eta 扩展可以将其转换为 (Int, Int) => Int 类型的值.在以下情况下调用此扩展:

一) _用于代替参数列表(方法值(第 6.7 节))
val f = foo _

b) 参数列表被省略,表达式的预期类型是函数类型(第 6.25.2 节):
val f: (Int, Int) => Int = foo

c) 每个参数都是 _ (“匿名函数的占位符语法”(第 6.23 节)的 special case)
val f = foo(_, _)   

表达式, foo(_, 1)不符合 Eta 扩展的条件;它只是扩展到 (a) => foo(a, 1) (§6.23)。常规类型推断不会试图找出 a: Int .

关于scala - 在 Scala 中,为什么我不能在不明确指定参数类型的情况下部分应用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2363013/

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