scala中这两种映射函数的方法有什么不同?

scala中这两种映射函数的方法有什么不同?,scala,Scala,在Scala Koans的惰性序列中: 这最后一行 strictList.map(f => f).head 返回一个函数 现在这最后一行已经编译了-但是为了实现他们想要在koan中实现的目标,您必须将其修改为: strictList.map(f => f()).head should be(1) (即在第二次引用f后添加参数) 什么会导致这种差异?(假设这不是一个错误)。Scala语言改变了吗 我的问题是:这两种在scala中映射函数的方法有什么区别?strictList是一个匿

在Scala Koans的惰性序列中:

这最后一行

strictList.map(f => f).head
返回一个函数

现在这最后一行已经编译了-但是为了实现他们想要在koan中实现的目标,您必须将其修改为:

strictList.map(f => f()).head should be(1)
(即在第二次引用
f
后添加参数)

什么会导致这种差异?(假设这不是一个错误)。Scala语言改变了吗


我的问题是:这两种在scala中映射函数的方法有什么区别?

strictList
是一个匿名函数列表。在第一种情况下:

strictList.map(f => f).head
您只是映射列表并返回函数。在第二种情况下:

strictList.map(f => f()).head
实际上,您正在调用每个匿名函数,并建立调用每个函数的结果列表

您链接到的文件中似乎有错误。第19行:

strictList.map(f => f).head should be(3)

这是不正确的。值应该是匿名函数,而不是
3

strictList
是匿名函数的列表。在第一种情况下:

strictList.map(f => f).head
您只是映射列表并返回函数。在第二种情况下:

strictList.map(f => f()).head
实际上,您正在调用每个匿名函数,并建立调用每个函数的结果列表

您链接到的文件中似乎有错误。第19行:

strictList.map(f => f).head should be(3)

这是不正确的。该值应该是匿名函数,而不是
3

谢谢@adrice727,这很有帮助。我的问题是-这曾经是有效的scala代码,现在由于语言规范的更改而无效吗?@hawkeye我想我现在理解了这个问题。这两行都是有效的Scala。问题在于您链接到的代码。查看我的最新答案。谢谢@adrice727,这很有帮助。我的问题是-这曾经是有效的scala代码,现在由于语言规范的更改而无效吗?@hawkeye我想我现在理解了这个问题。这两行都是有效的Scala。问题在于您链接到的代码。请参阅我的最新答案。