Что выведет код Junior Дженерики обновлено
Что выведет Go: обобщённые Map и Filter
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.
package main
import "fmt"
func Map[T, U any](s []T, f func(T) U) []U {
r := make([]U, 0, len(s))
for _, v := range s {
r = append(r, f(v))
}
return r
}
func Filter[T any](s []T, keep func(T) bool) []T {
var r []T
for _, v := range s {
if keep(v) {
r = append(r, v)
}
}
return r
}
func main() {
words := []string{"go", "rust", "c", "java"}
long := Filter(words, func(s string) bool { return len(s) > 2 })
fmt.Println(long, Map(long, func(s string) int { return len(s) }))
fmt.Println(Filter([]int{1, 2}, func(int) bool { return false }) == nil)
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: [rust java] [4 4], true. Типы T и U выводятся из аргументов.
Что выведет
[rust java] [4 4]
true
Разбор
Типы T и U выводятся из аргументов. Filter оставляет слова длиннее двух символов, Map превращает их в длины. Если ничего не прошло, r так и остаётся nil-слайсом, поэтому сравнение с nil истинно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.