Я хочу переключиться на strings.xml, чтобы использовать несколько языков.
Я знаю, как загрузить массив строк из strings.xml и для простых массивов, это не проблема, но большинство моих массивов не простые! Вся идея состоит в том, чтобы пауков их.
fun pick( list :Array<String>):String{
return list.random()
}
fun colour():String {
val list = arrayOf("blue","red","green",size()+"")
return pick(list)
}
fun size():String {
val list = arrayOf("big","small","medium")
return pick(list)
}
выше - быстрый пример
функция size будет работать нормально из strings.xml, но функция color не будет работать, так как часть массива динамически выбирается при нажатии на функцию
Причина, по которой все проходит через pick (), заключается в том, что я могу добавить модификаторы в строки (изменить цвет, посчитать, сколько раз вызывается функция и т. Д.)
Некоторые массивы в моем реальном коде (на данный момент это c #) содержат 10 или 20 динамических записей
Так как же для этого использовать strings.xml? Есть ли способ, возможно, добавить ключевые слова, которые я могу затем изменить в pick () .... хотя тогда выбор по сути будет вызывать себя?
Я застрял на этом в течение нескольких дней, может быть, я упускаю что-то очевидное?
EDIT
Пробовал использовать ключевые слова, но это вызывает переполнение стека, пример кода:
fun keyword(input:String):String{
val result = input.replace(
"#colour", colour()
).replace(
"#size", size()
)
return result
}
fun pick( list :Array<String>):String{
val tempResult = list.random()
val result= keyword(tempResult)
return result
}
fun colour():String {
val list = arrayOf("blue","red","green","#size blue")
return pick(list)
}
fun size():String {
val list = arrayOf("big","small","medium")
return pick(list)
}
fun example():String{
val list = arrayOf("#size #colour whale")
return pick(list)
}
это было вызвано с
val результат = пример ()
(по сути, вызов выполняется асинхронно, так что, когда массивы становятся большими, они не вешают программу, проверяют ее без ключевых слов, и она отлично работает)
ошибка:
2019-04-17 22: 48: 41.433 9010-9665 / com.mrgreaper2004.dmslittlehelper
W / System.err: java.lang.StackOverflowError: размер стека 1041 КБ
2019-04-17 22: 48: 41.436 9010-9665 / com.mrgreaper2004.dmslittlehelper
W / System.err: at java.util.Random.next (Random.java:202) 2019-04-17
22: 48: 41.436 9010-9665 / com.mrgreaper2004.dmslittlehelper W / System.err:
at java.util.Random.nextInt (Random.java:390) 2019-04-17 22: 48: 41.436
9010-9665 / com.mrgreaper2004.dmslittlehelper W / System.err: at
kotlin.random.AbstractPlatformRandom.nextInt (PlatformRandom.kt: 45)
2019-04-17 22: 48: 41.436 9010-9665 / com.mrgreaper2004.dmslittlehelper
W / System.err: at
kotlin.random.Random $ Default.nextInt (Random.kt: 246) 2019-04-17
22: 48: 41.436 9010-9665 / com.mrgreaper2004.dmslittlehelper W / System.err:
в kotlin.collections.ArraysKt ___ ArraysKt.random (_Arrays.kt: 2212)
2019-04-17 22: 48: 41.437 9010-9665 / com.mrgreaper2004.dmslittlehelper
W / System.err: at
com.mrgreaper2004.dmslittlehelper.GeneratorFragment.pick (GeneratorFragment.kt: 129)
2019-04-17 22: 48: 41.437 9010-9665 / com.mrgreaper2004.dmslittlehelper
W / System.err: at
com.mrgreaper2004.dmslittlehelper.GeneratorFragment.colour (GeneratorFragment.kt: 136) 2019-04-17 22: 48: 41.437 9010-9665 / com.mrgreaper2004.dmslittlehelper
W / System.err: at
com.mrgreaper2004.dmslittlehelper.GeneratorFragment.keyword (GeneratorFragment.kt: 121)
последние части ошибки просто повторяются