看看这个不错的斐波纳契实现:
scala> val fibs = {
def go(f0: Int, f1: Int): Stream[Int] =
Stream.cons(f0, go(f1, f0+f1))
go(0, 1)
}
fibs: Stream[Int] = Stream(0, ?)
一开始看它似乎接受两个参数go(f0:Int,f1:Int)但是尝试这会导致TooManyArgumentsException 但是有一个参数它可以正常工作(应该如此)
scala> fibs(9)
res23: Int = 34
如何知道fibs应该接受的参数数量?
答案 0 :(得分:3)
fibs
不是一种方法,它是Stream[Int]
类型的值。
当您撰写fibs(9)
时,您正在调用fibs.apply(9)
,对于Stream
,它会按序列中的索引选择一个元素(请参阅here )。
这与:
相同scala> val l = List(1,2,3,4)
l: List[Int] = List(1, 2, 3, 4)
scala> l(2)
res0: Int = 3