scala - 为什么使用多个参数列表定义折叠?
问题描述
我试图找出在 Scala 中使用括号的押韵或原因,特别是使用 fold 方法:
val sum = prices.fold(0.0)(_ + _)
为什么会这样?Scala 似乎通常不遵循 FP 格式(方法调用上没有括号),但它确实......除了它还需要在单项累加器中加上括号?为什么也不是
val sum = prices.fold((0.0), (_ + _))
或者
val sum = prices.fold 0.0 (_ + _)
?
解决方案
IterableOnce.fold
使用多个参数列表定义可能是由于 Jörg W Mittag 所建议的类型推断原因
def fold[A1 >: A](z: A1)(op: (A1, A1) => A1): A1
另一方面,例如,Either.fold
使用单个参数列表定义
def fold[C](fa: A => C, fb: B => C): C
确认类型推断原因,请考虑以下示例
def zar[T](x: T)(f: (T, T) => T) = f(x, x)
def tar[T](x: T, f: (T, T) => T) = f(x, x)
zar(21)(_ + _) // OK
tar(21, _ + _) // Error: missing parameter type for expanded function
tar[Int](21, _ + _) // OK
tar
请注意,当不使用多个参数列表时,我们必须如何显式指定类型参数。
推荐阅读
- mysql - 我正在处理查询,当有活动时,我要计算日期,如果日期范围内没有活动,我也想得到计数 0
- c - C用下一个和前一个指针创建一个链表
- javascript - path.join 在 require 语句中
- android - 如何在改造中修复 IOException
- apache-kafka - 从 Clickhouse 推送数据到 Kafka
- c++ - 使用动态规划的多个可用包的背包问题
- php - 使用 SELECT 查询将大表导出到客户端计算机
- tensorflow - 在 Keras/Tensorflow 中计算困惑度和内存问题
- yocto - 仅当机器名称包含特定子字符串时,如何在 yocto 中添加 bitbake 层?
- python-3.x - 沿轴迭代 numpy.ndarray