Scala:函数组合中的类型不匹配,发现 (Int, Int) => Seq[Int] require ? => 序列[整数]

标签 scala type-systems function-composition

我试图在一个脚本中组合 2 个函数,但遇到了无法解决的类型不匹配问题。 这是示例代码:

def generate(start: Int, end: Int): Seq[Int] = (start until end).toSeq
def restrain(seq: Seq[Int]) = seq.dropWhile(_ < 20).takeWhile(_ < 60)

val com: (Int, Int) => Seq[Int] = (restrain _ compose generate)

通过将其加载到 REPL 中:

:load test.sc

我收到以下错误:

       val com: (Int, Int) => Seq[Int] = (restrain _ compose generate)
                                                             ^
test.sc:1: error: type mismatch;
        found   : (Int, Int) => Seq[Int]
        required: ? => Seq[Int]

我做错了什么?

最佳答案

类型 Function2[Int, Int, Seq[Int]]Function1[(Int, Int), Seq[Int]] 不同。 (generate _) 生成前者,而对于此组合,您需要后者。尝试:

restrain _ compose (generate _).tupled

关于Scala:函数组合中的类型不匹配,发现 (Int, Int) => Seq[Int] require ? => 序列[整数],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62468237/

相关文章:

scala - 无法使用 macwire 注入(inject) Play WS 或 WSClient

haskell - 两个函数使用类型注释进行编译。删除一个注释 - 不编译。删除两个 - 再次编译。为什么?

haskell - 为什么我可以在没有显式或隐式定义的情况下使用 `>>=`?

haskell - 欧拉计划 3 - Haskell

Haskell:为什么 ((.).(.)) f g 等于 f 。克x?

algorithm - Scala 中的暴力字符串匹配

postgresql - jdbc-HikariCP : Seeing low insert thoughput while DB/App cpu % is still low

git - 我应该将 jar 依赖项放在共享存储库中还是只放在源文件中?

rust - Rc 中用于 AST 操作的沮丧特征

haskell - Haskell 中的点运算符 : need more explanation