我应该如何理解这个定义“ final def fold [B](ifEmpty:=> B)(f:(A)=> B):B”

时间:2020-04-20 22:24:06

标签: scala fold pass-by-name

我知道这个问题可能很愚蠢。

我刚刚发现自己很难理解fold link中的Scala Option定义。

有人可以帮助我理解定义部分吗? final def fold[B](ifEmpty: => B)(f: (A) => B): B

(ifEmpty: => B)是什么意思,这里的ifEmpty代表一个函数吗?正确的部分=> B代表什么?它代表没有任何参数的功能吗?应该是() => B吗?

1 个答案:

答案 0 :(得分:2)

关于

的定义有很多事情要做
<div>
  <div>
    <section>
      <figure>
        <a href="#text1" class="pin">1</i>
        <a href="#text2" class="pin">2</i>
        <a href="#text3" class="pin">3</i>
        <a href="#text4" class="pin">4</i>
      </figure>
    </section>
  </div>			
  <div class="text" id="text1">
    <h3>Text item 1</h3>
  </div>
  <div class="text" id="text2">
    <h3>Text item 2</h3>
  </div>
  <div class="text" id="text3">
    <h3>Text item 3</h3>
  </div>
  <div class="text" id="text4">
    <h3>Text item 4</h3>
  </div>
</div>

我们有

  • by-name参数final def fold[B](ifEmpty: => B)(f: (A) => B): B 。这确实与ifEmpty: => B类似,并且意味着() => B直到在方法体内使用(如果曾经使用过)时才进行评估。
  • 多个参数列表ifEmpty,其中helps type inference是因为Scala类型推断适用于每个列表。这意味着我们不必在调用站点上显式提供(ifEmpty: => B)(f: (A) => B)类型的参数。
  • 类型参数[B]A使方法多态
  • B防止方法被覆盖
  • final是一种高阶方法,因为它接受函数类型为fold的参数