0

因此,在阅读有关Scala 中隐式类的 Scala 之旅时,我遇到了这段代码:

object Helpers {
  implicit class IntWithTimes(x: Int) {
    def times[A](f: => A): Unit = {
      def loop(current: Int): Unit =
        if(current > 0) {
          f
          loop(current - 1)
        }
      loop(x)
    }
  }
}

令我困扰的是这def times[A](f: => A): Unit = {条线。这里发生了什么?函数类型参数的部分A,我理解,但我无法完全理解这(f: => A)部分是什么。是否表示 f 是一个接受任何类型/数量的参数并返回 A 类型对象的函数?

因此,这种结构是否有效地意味着一个接受任何参数并返回我想要的任何东西的函数?

4

1 回答 1

3

这是来自 Scala gitter频道的关于该主题的聊天,为按名称参数提供了一个很好的类比

Gavin Bisesi @Daenyth 2 月 24 日 17:08

=> X是“按名称”语法它是非常像() => X的东西的语法糖调用者不需要提供() =>部分,并且在方法主体中引用它也不需要(),但其他方面基本相同

Rob Norris @tpolecat 2 月 24 日 17:17

...我认为最好考虑像 s 一样的别名参数和像defs 一样的普通参数val。在幕后,它是一个无效的功能,但从语言的角度来看,它是不同的。def foo(a: => String)并且def foo(a: () => String)具有不同的类型,并且 a 在每个 foo 的主体中的行为不同。

法比奥·拉贝拉@SystemFw 2 月 24 日 20:19

@Daenyth redef/val :A /: => A我实际上开始我的程序教程作为价值。def/: => A与“存在”有关,vs val/: A与“做”有关,理解做/被二分法对于理解带有效果的 FP 非常有用,它也可以转化为实际使用原生“做”的纯 FP 范式(不像什么我们将程序作为值来处理,其中一切都是“存在”和“做”发生在组合子的元语言中,例如 flatMap)。Unison 中的代数效应就是一个例子

于 2020-02-27T19:44:04.553 回答