#lua
#lua
Вопрос:
Как я могу заставить 2 «print» выдать мне true?
Код:
Config = {}
Config.option1.general = true
Config.option2.general = false
print(Config.option1.general)
print('Config.'..'option1'..'.general')
Вывод:
true
Config.option1.general
Извините меня за мое невежество
Комментарии:
1. пожалуйста, укажите, почему вторая
2. цель состояла в том, чтобы создать функцию, которой вы предоставляете опцию, и выполнить код с переменными из соответствующего списка
Ответ №1:
Цель состояла в том, чтобы создать функцию, которой вы предоставляете опцию, и выполнить код с переменными из соответствующего списка.
Просто создайте функцию, которая принимает в качестве входных данных строку параметров, и используйте строку в качестве ключа в Config
таблице:
function getOption (opt)
return Config[opt].general
end
Затем вы можете использовать возвращаемое значение так, как вам нравится:
> getOption('option1')
true
> print(getOption('option1'))
true
> if (getOption('option1')) then print 'Yay!' else print 'Aw...' end
Yay!
Если вы хотите жить опасно, вы можете использовать load
для запуска фрагмента кода из строки. Однако использование этой функции с пользовательским вводом приводит к проблемам с безопасностью.
Просто напишите функцию, которая принимает строку, указывающую параметр, и используйте этот ввод для формирования строки, представляющей фрагмент. load
Функция возвращает функцию, телом которой является фрагмент, поэтому вам нужно будет вызвать эту возвращаемую функцию, чтобы получить результат из фрагмента:
function getOption (opt)
local cmd = 'Config.' .. opt .. '.general'
return load('return ' .. cmd)()
end
С помощью getOption('option1')
cmd
строка становится 'Config.option1.general'
, и это объединяется с 'return '
для создания фрагмента, 'return Config.option1.general'
который передается load
. Инструкция load('return Config.option1.general')()
вызывает функцию, возвращаемую load
, и возвращаемое значение снова возвращается из getOption
функции.
Пример взаимодействия:
> getOption('option1')
true
> getOption('option2')
false
Ответ №2:
первая печать собирает переменную и, следовательно, отображает значение этой переменной
вторая печать уже собирает СТРОКУ. Строка — это набор символов, они представляют собой только текст, и, следовательно, этот текст будет отображаться
например, представьте, что у нас есть переменная test = true
если вы это сделаете print(test)
, будет отображено значение переменной, то есть true
. Теперь, если вы получите print("test")
, то ""
это означает, что мы говорим о текстовом «тесте», а не о переменной test
, поэтому test
вместо true
будет отображаться so.
Обратите внимание, что при втором выводе используются 2 точки ..
, это называется КОНКАТЕНАЦИЕЙ, это когда мы соединяем две или более строк, то есть два или более текста в одном
По этой причине вы не можете печатать true
на втором отпечатке, потому что вы собираете СТРОКУ с именем переменной, а не саму переменную
Комментарии:
1. Большое вам спасибо, я попробую сделать это другим способом.