scala中这两种映射函数的方法有什么不同?
在Scala Koans的惰性序列中: 这最后一行scala中这两种映射函数的方法有什么不同?,scala,Scala,在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
返回一个函数
现在这最后一行已经编译了-但是为了实现他们想要在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。问题在于您链接到的代码。请参阅我的最新答案。