как я могу сделать это с переменными в lua?

#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. пожалуйста, укажите, почему вторая print должна отличаться?

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. Большое вам спасибо, я попробую сделать это другим способом.