Scala: обнаружено несоответствие типов в композиции функций (Int, Int) => Seq [Int] require? => Seq [Int] - PullRequest
2 голосов
/ 19 июня 2020

Я пытаюсь скомпоновать 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]

Что я делаешь что-то не так?

1 Ответ

4 голосов
/ 19 июня 2020

Типы Function2[Int, Int, Seq[Int]] и Function1[(Int, Int), Seq[Int]] не совпадают. (generate _) производит первое, тогда как для этой композиции вам понадобится второе. Попробуйте:

restrain _ compose (generate _).tupled
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...