print(a+" ")) 编译得很好,但是 List("This","is","Scala").foreach(prin-6ren">
gpt4 book ai didi

使用 _ 占位符的 scala 类型推断

转载 作者:行者123 更新时间:2023-12-04 10:31:26 25 4
gpt4 key购买 nike

List("This","is","Scala").foreach(a => print(a+" "))

编译得很好,但是
List("This","is","Scala").foreach(print(_+" "))

未能提示缺少参数类型。我无法弄清楚为什么它会失败。

编辑:我的意思是 print 不是 println - 并不是说​​它在逻辑上有所不同。

最佳答案

问题是这

List("This","is","Scala").foreach(print(_+" "))

不等于
List("This","is","Scala").foreach(a => print(a+" "))

但要
List("This","is","Scala").foreach(print(a => a+" "))

现在,让我们看看 foreach 的类型签名。 :
def foreach [B] (f: (A) ⇒ B) : Unit

在哪里 AList 的类型参数本身。因为我们有一个 List[String] ,编译器知道必须传递给 foreach一个 Function[String, B] .

a => print(a+" ") a 的类型那时已经知道: String .

print(a => a+" ")有问题,如 print不是 Function .但是,编译器还没有考虑到这一点——它仍在尝试编译 a => a+" " .那么我们来看看 Predef.print的类型:
def print (x: Any) : Unit

所以 a => a+" "必须是 Any 类型,当然,这意味着它可以是任何东西。它无助于编译器断言 a 的类型。是。这并不重要,因为您不想打印 Function排在第一位。

关于使用 _ 占位符的 scala 类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3493141/

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