Что такое полный код {"456"} для transform: (String) → String в Котлине?

92
12

transform - это lambda fun с определением (String) → String

Мне сказали, что {"456"} является допустимым значением transform, что является полным кодом {"456"} для transform: (String) → String?

Правильно ли Code A?

Код А

val aa="123".myAdd{a:String -> "456"}

Код B

val aa="123".myAdd{"456"}

fun String.myAdd(transform: (String) -> String ) = this + transform(this)

спросил(а) 2021-01-27T16:24:27+03:00 8 месяцев, 3 недели назад
1
Решение
102

Используя ваш пример кода, позвольте мне попытаться объяснить, что он делает.

val result = "123".add { it -> "456" }

fun String.add(transform: (String) -> String ) {
this + transform.invoke(this)
}

Во-первых, вы создаете String "123", и вы вызываете на нее лямбда. Теперь, в вашей лямбде, it будет эта строка "123".

Обычно вы должны каким-то образом модифицировать этот вход, например List.Sort(), но вы фактически отбрасываете этот ввод и просто возвращаете "456". Последняя линия вашей лямбды - это возвращение.

Например, мы можем взять вход "123" и увеличить каждый номер. Это займет ваш String, преобразует его в List символов, затем увеличивает каждый символ, а затем объединяет их вместе.

val result = "123".add { it -> it.map { it.inc() }.joinToString(separator = "") }

Лямбда берет String "123" и применяет ваше преобразование и возвращает новую String. ((String) → String) Я считаю, что это должно принять "123" и вернуть "234", который будет добавлен к "123". "123234".

Помогает ли это объяснить, как работает лямбда (String) → String?

ответил(а) 2021-01-27T16:24:27+03:00 8 месяцев, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема