我目前正在通过"Scala编程"一书来学习Scala.到目前为止,对于所有看起来很奇怪的东西(从Java程序员的角度来看)都有很好的解释,但是这个使用Stream生成Fibonacci序列的例子让我感到有些困惑:
def fibFrom(a: Int, b: Int): Stream[Int] =
a #:: fibFrom(b, a + b)
Run Code Online (Sandbox Code Playgroud)
如何完成Stream的构建?当然,#::
运营商对此负有某种责任.我理解,因为它结束了:
,它是右关联的,但这并不能解释Stream的创建.我猜它是以某种方式隐式转换为构造函数,但我不明白为什么以及如何确切.
我已经找到了答案Predef.scala
,LowPriorityImplicits.scala
但到目前为止还没有运气.
任何人都可以开导我吗?
它是正确的关联,所以它作为右参数的方法:
fibFrom(b, a + b).#::(a)
Run Code Online (Sandbox Code Playgroud)
至少这是它试图在语法上做的事情.Stream[Int]
没有这样的方法.幸运的是,object Stream
有一个隐含的某个类ConsWrapper
有这个方法(代码).
那么,隐式解决后你得到的是:
immutable.this.Stream.consWrapper(fibFrom(b, a + b)).#::(a)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1566 次 |
最近记录: |