我试图在一个脚本中组合 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/