Как переключиться на strings.xml при использовании динамических массивов? - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу переключиться на 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)

последние части ошибки просто повторяются

1 Ответ

0 голосов
/ 18 апреля 2019

ну, я подозревал это!

fun pick( list :Array<String>):String{
    val tempResult = list.random()
    //val result= keyword(tempResult)
    return tempResult
}

fun colour():String {
    val list = arrayOf("blue","red","green","#size blue")
    val tresult=pick(list)
    val result = tresult.replace("#size",size())
    return result
}

fun size():String {
    val list = arrayOf("big","small","medium")
    val result=pick(list)
    return result
}

fun example():String{
    val list = arrayOf("#size #colour whale")
    val tresult=pick(list)
    val result = tresult.replace("#size",size()).replace("#colour",colour())
    return result
}

, поскольку не каждый генератор будет использовать каждый генератор, который я могу выбрать, чтобы быть конкретным ... ответ неожиданно пришел ко мне, поскольку я часто использую строку в массиве длязаменить несколько вызовов одной и той же функции .... например, если в массиве есть несколько различных элементов, каждый из которых может иметь цвет, но будет выбран только один элемент, я выбрал случайный цвет, назначенный ему в строку, а затем ссылаюсь на него в каждомпредмет, который нуждался в цвете ... нет смысла случайным образом выбирать несколько цветов, если будет использоваться только один (может быть плохо объяснять)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...