@AleexF

Kotlin collections: Почему не работает вызов функции в .map?

Как передать статический метод класса(В принципе не важно, любой метод) в collection.map()
Пример кода
class Utils {
	companion object {
    	fun squareOf(x:Int) = x * x
    }
}

fun main(args: Array<String>) {
    val a = listOf(1, 2, 3, 5, 10)
    val b = a.map(Utils.squareOf)
    
    for(x in a) print("$x ")
    println("");
    for(x in b) print("$x ")
    println("");
}

Строка val b = a.map(Utils.squareOf) не работает. Я могу сделать так: val b = a.map { Utils.squareOf(it) }, но должно работать и в первом случае.
  • Вопрос задан
  • 226 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Kotlin
Android developer at Yandex
Во-первых, не "не работает", а "не компилируется". Во-вторых, ты написал синтаксически неверную конструкцию. Это не вызов функции, в этом месте его написать нельзя. Можно только лямбду или ссылку на функцию.
Можно написать так: .map(Utils.Companion::squareOf)
В-третьих, тащить в котлин дурную модель джавы, где "всё есть класс", не нужно. Этот класс Utils не несет никакой пользы. Нужно написать просто функцию
fun squareOf(x:Int) = x * x //в файле Utils.kt
и затем использовать ссылку на неё:
.map(::squareOf)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы