Я выполнил упражнение strains
на exercism.io.Я рефакторинг своего решения.Для контекста: Ints.Keep
принимает функцию предиката и возвращает отфильтрованный фрагмент типа Ints для каждого элемента, для которого функция предиката имеет значение true.И наоборот, Discard возвращает все элементы, для которых предикат неверен.Discard возвращает обратное значение Keep.Я реализовал это так:
func (i Ints) Keep(pred func(int) bool) (out Ints) {
for _, elt := range i {
if pred(elt) {
out = append(out, elt)
}
}
return
}
func (i Ints) Discard(f func(int) bool) Ints {
return i.Keep(func(n int) bool { return !f(n) })
}
Пример использования
Теперь я пытаюсь немного его почистить.Я хочу создать:
type Predicate func(int) bool
Затем я хочу реализовать Keep and Discard, где вводом является Predicate
.Я сталкиваюсь с проблемой, когда пытаюсь создать анонимную функцию в Discard, чтобы вернуть Keep:
func (i Ints) Discard(p Predicate) Ints {
return i.Keep(Predicate(n int) { return !p(n) })
}
Возможно ли это?Я не могу найти способ создать анонимную функцию именованного типа func.