为什么该方法只接受一个参数?

时间:2014-12-30 13:20:26

标签: scala

看看这个不错的斐波纳契实现:

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应该接受的参数数量?

1 个答案:

答案 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