2014-12-30 4 views
0

Глядя на этих красивых реализациях Фибоначчей:Почему метод принимает только один аргумент?

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, ?) 

на первый взгляд, кажется, что она принимает два аргумента идет (f0: Int, f1: Int), но при попытке что приведет TooManyArgumentsException однако с одним аргументом он отлично работает (как это должно быть)

scala> fibs(9) 
res23: Int = 34 

Как узнать количество аргументов, которые должны принять fibs?

ответ

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 
Смежные вопросы