Size: a a a

2019 January 08

И

Икстансик @XTANCE in KotlinLangRu
Всем привет ещё раз.
источник

И

Икстансик @XTANCE in KotlinLangRu
У меня в приложении, допустим, есть строка :
val iTest = 1
И есть поле для ввода.
Я хочу, чтобы, допустим, пользователь мог ввести :
"значение $iTest",
И оно бы преобразовало эту строку в
" значение 1"
И вывело обратно.
Это возможно?
источник

AL

Alexander Levin in KotlinLangRu
Икстансик @XTANCE
У меня в приложении, допустим, есть строка :
val iTest = 1
И есть поле для ввода.
Я хочу, чтобы, допустим, пользователь мог ввести :
"значение $iTest",
И оно бы преобразовало эту строку в
" значение 1"
И вывело обратно.
Это возможно?
Скорее нет, чем да.
Без какой-либо магии или костылей, насколько я понимаю, тут не обойдётся.

Искать просто локальные переменные, мягко говоря, слишком сложно решаемая задача (Reflection или другие встроенные средства такой инфы не дают, вот тут ребята пишут про очень сложные обходные варианты: https://stackoverflow.com/questions/38663360/it-is-possible-to-get-local-variable-names-programmatically-in-java-or-kotlin), так что нужно будет где-то хранить явно то, что можно отдать пользователю.

Для преобразования строки варианты действий примерно такие:


1. Использовать Script Engine. Подключаем дополнительные либы (kotlin-plugin, kotlin-script-runtime, kotlin-script-util, надеюсь, что всё), добавляем инфу о engine в META-INF, пишем явно код вроде ниже указанного:
fun main(args: Array<String>) {
   with(ScriptEngineManager().getEngineByExtension("kts")) {
       eval("val x = 3")
       val res2 = eval("\"hello \$x \${x+3}\"")
       println(res2)
       println(eval(readLine()))
   }
}
В консоли (вторая строка моя):
hello 3 6
"$x ${x*x}"
3 9

Примеры такого можно искать тут:
https://github.com/JetBrains/kotlin/blob/master/libraries/examples/kotlin-jsr223-local-example/src/test/kotlin/org/jetbrains/kotlin/script/jsr223/KotlinJsr223ScriptEngineIT.kt#L67
https://stackoverflow.com/questions/44009515/dynamically-evaluating-templated-strings-in-kotlin
https://kotlinexpertise.com/run-kotlin-scripts-from-kotlin-programs/


Нюансы - неочевидно, как исхитриться и написать штуку, чтобы без кучи лишнего кода объявлять переменные и в программу и в скриптовый движок. Пару телодвижений попробовал изобразить тут, но оба с недостатками (в виде отвратительного кода и косяков): https://gist.github.com/Jellymath/3d730d6ca1b23e59cf76cd29c5c17be8

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


2. Самому навелосипедить разбор строк с поиском долларов в них. Для этого все равно придётся куда-то по-сложному положить переменные. Скорее всего такое решение во всех пониманиях более адекватное, так как несёт за собой меньшее количество больших проблем.



P.S. Мог ошибиться во всём, так что лучше перепроверять мои утверждения.
источник

QH

Quantum Harmonizer in KotlinLangRu
Икстансик @XTANCE
У меня в приложении, допустим, есть строка :
val iTest = 1
И есть поле для ввода.
Я хочу, чтобы, допустим, пользователь мог ввести :
"значение $iTest",
И оно бы преобразовало эту строку в
" значение 1"
И вывело обратно.
Это возможно?
String.replace
источник

И

Икстансик @XTANCE in KotlinLangRu
Спасибо, попробую.. Тоже хотел с наименьшим количеством кода это выполнить
источник

Б

Блондин in KotlinLangRu
всем приветик
источник

B

Boozy Urban 😏 in KotlinLangRu
Блондин
всем приветик
источник
2019 January 09

T

TheZak in KotlinLangRu
А если просто поздоровался?
источник

SB

Stanislav Bohoon in KotlinLangRu
Блондин
всем приветик
Так нельзя
источник

Б

Блондин in KotlinLangRu
Stanislav Bohoon
Так нельзя
Почему ?
источник

VA

Victor Alenkov in KotlinLangRu
Блондин
Почему ?
сказали же : http://neprivet.ru
источник

SB

Stanislav Bohoon in KotlinLangRu
Кажется мы в рекурсии😊
источник

ЕР

Евгений Рыжаков in KotlinLangRu
Понял
источник

ЕР

Евгений Рыжаков in KotlinLangRu
"привет. Мне пока сказать нечего, но я хочу поздороваться, чтобы обо мне вспомнили"
источник

ЕР

Евгений Рыжаков in KotlinLangRu
Правильно?)
источник

SB

Stanislav Bohoon in KotlinLangRu
источник

SS

Sergey Sverdlov in KotlinLangRu
Существует какая-то слитная спецификация языка? То есть не интерактивный справочник, а, например, pdf? По-русски?
источник

AV

Anton Vlasov in KotlinLangRu
Sergey Sverdlov
Существует какая-то слитная спецификация языка? То есть не интерактивный справочник, а, например, pdf? По-русски?
Книга Kotlin в действии
источник

SS

Sergey Sverdlov in KotlinLangRu
А разработчики языка формальную спецификацию вообще не публиковали? Если не считать интерактивный вариант.
источник

QH

Quantum Harmonizer in KotlinLangRu
Sergey Sverdlov
А разработчики языка формальную спецификацию вообще не публиковали? Если не считать интерактивный вариант.
Спеки нет как таковой. Есть грамматика.
источник