Используйте переменную для именованного параметра в kotlin - PullRequest
0 голосов
/ 30 января 2019

У меня есть функция, определенная следующим образом:

getTypeB(id: String, 
         valA1: TypeA = defaultA1
         valA2: TypeA = defaultA2,
         valA3: TypeA = defaultA3 ) : TypeB {}

Я знаю, используя именованные аргументы, я могу вызвать вышеупомянутую функцию только с некоторыми значениями, например

getTypeB(id,
         valA2 = someValueOfTypeA )

Мой вопросесть ли здесь литеральный текст valA2 в качестве переменной.Я хотел иметь возможность вызывать getTypeB откуда-то еще, где они не будут знать имена аргументов аргументов, пока они не будут переданы. Так есть ли способ использовать переменную для именованного аргумента?Если нет, у нас есть какая-нибудь другая альтернатива, которую я могу использовать здесь?

1 Ответ

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

Вы можете использовать map для этого:

fun getTypeB(id: String,
             varsMap: Map<String, TypeA>): TypeB {
    val valA1: TypeA = varsMap.getOrElse("valA1") { defaultA1 }
    val valA2: TypeA = varsMap.getOrElse("valA2") { defaultA2 }
    val valA3: TypeA = varsMap.getOrElse("valA3") { defaultA3 }
    //
}

val args = mapOf(
        "valA1" to someValueOfTypeA,
        "valA2" to someValueOfTypeA)
getTypeB(id, args)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...