scala - 为什么我的 Haskell snd 实现不能在 Scala 中编译?
问题描述
我按照 Haskell snd定义了以下函数
def snd[T](pair: (_, T)): T = pair._2
尝试将它与 a 一起使用List[ListNode[T]]
不会编译。为什么不?
list
.reduceOption(snd)
在哪里:
case class ListNode[T](data: T, var next: Option[ListNode[T]])(implicit ordering: Ordering[T]) extends Ordered[ListNode[T]] {...}
错误:
Type mismatch, expected: (NonInferedA1, NonInferedA1) => NonInferedA1, actual Tuple2[_, Nothing] => Nothing
解决方案
具有 arity 的方法reduce
和reduceOption
require 函数2
,而不是采用元组的一元函数。
之间有区别
Function1[(X, Y), Z]
和
Function2[X, Y, Z]
第一个是一元的并接受一个元组,第二个是二元的。方法及其 eta 扩展也是如此。
这在这里按预期工作:
def twoArgSnd[T](a: Any, b: T): T = b
list.reduceOption(twoArgSnd[Int])
还有相关的:
推荐阅读
- node.js - UnhandledPromiseRejectionWarning 在抛出错误但未记录错误时发生在 catch
- c++ - 有没有办法让一个类函数只能从另一个类函数调用?
- windows - 如何在 Windows 上编译共享库,使其可以与 raku 中的 NativeCall 一起使用?
- google-chrome - 我在 Chrome 上看到此错误,但在 Firefox 上没有看到
- node.js - NodeJS 从本地 SMTP 服务器发送电子邮件
- sql - 如果它们存储在数组中,如何获取前 5 个关键字
- batch-file - 如何使用 Dir 命令创建所有子目录中所有文件的 list.txt 文件,其中*不*包含路径名
- javascript - 刷新浏览器后 React-Redux 数据未到达控制台
- kubernetes - 从 Docker Compose 迁移到 Kubernetes,将配置存储在持久卷上
- r - 在 R 可反应嵌套/分组表中提供 GROUP 信息详细信息