Scala Koans for Lazy Sequences they have:
var x = 0
def inc = {x += 1; x}
val strictList = List(inc _, inc _, inc _)
strictList.map(f => f).head should be(_)
最后一行
strictList.map(f => f).head
返回一个函数。
现在最后一行编译 - 但要实现他们想要的目标,你必须将其修改为:
strictList.map(f => f()).head should be(1)
(即您在第二次引用f
后添加了parens。)
会导致这种差异的原因是什么? (假设这不是一个错误)。 Scala语言有变化吗?
我的问题是: scala中这两种映射函数的方法有什么区别?
答案 0 :(得分:3)
strictList
是一个匿名函数列表。在第一种情况下:
strictList.map(f => f).head
你只是映射列表并返回功能。在第二种情况下:
strictList.map(f => f()).head
您实际上正在调用每个匿名函数并构建调用每个函数的结果列表。
您链接的文件中似乎有错误。第19行:
strictList.map(f => f).head should be(3)
不正确。值应该是匿名函数,而不是3
。