Котлин: vararg varargs в конструкторе - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь реализовать класс Filter.Моя первая версия была такой по этому вопросу: Kotlin vararg от A до vararg от B

В тот момент я не заметил рекурсивности при построении с предикатом, поэтому я ищудругой способ реализации этого.

Я изменил это объявление этого класса: class Filter<in T>(vararg val predicates: (T) -> Boolean)

Я пытаюсь заставить этот другой конструктор работать:

constructor(vararg filters: Filter<T>) : this(/* do something */)

Я не знаю, как отобразить множество фильтров (которые содержат множество предикатов) в множество предикатов, которые имеют все предикаты в каждом фильтре, особенно учитывая, что я не могу вызвать какую-либо функцию в классе фильтра, потому что она имеетне был инициализирован в этот момент.

Кроме того, есть лучший способ достичь того, что я пытаюсь получить (класс, который можно создать как с помощью массива предикатов, так и массива экземпляров самого класса).)

1 Ответ

0 голосов
/ 21 января 2019

Возможно что-то вроде этого:

typealias Predicate<T> = (T) -> Boolean

class Filter<T> {
    private val pred: MutableList<Predicate<T>> = mutableListOf()

    constructor(vararg val predicates: Predicate<T>) {
        predicates.forEach { pred.add(it) }
    }

    constructor(vararg filters: Filter<T>) {
        filters.forEach { pred.addAll(it.pred) }
    }
}

fun main(args: Array<String>) {
    val f1 = Filter<String>({true}, {true})
    val f2 = Filter<String>(f1, f1)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...