Search code examples
lua

how can I do this with the variables in lua?


How can I make the 2 "print" give me true?

Code:

Config = {}
Config.option1.general = true
Config.option2.general = false

print(Config.option1.general)
print('Config.'..'option1'..'.general')

Output:

true
Config.option1.general

Excuse me for my ignorance


Solution

  • The objective was to create a function to which you give the option and execute a code with the variables of the corresponding list.

    Just create a function that takes as input an option string, and use the string as a key into the Config table:

    function getOption (opt)
      return Config[opt].general
    end
    

    Then you can use the returned value however you like:

    > getOption('option1')
    true
    > print(getOption('option1'))
    true
    > if (getOption('option1')) then print 'Yay!' else print 'Aw...' end
    Yay!
    

    If you want to live dangerously, you can use load to run a chunk of code from a string. Using this feature with user input is begging for security problems, though.

    Just write a function that takes a string specifying the option, and use that input to fashion a string representing the chunk. The load function returns a function that has the chunk as its body, so you will need to call that returned function to get the result from the chunk:

    function getOption (opt)
      local cmd = 'Config.' .. opt .. '.general'
      return load('return ' .. cmd)()
    end
    

    With getOption('option1'), the cmd string becomes 'Config.option1.general', and this is concatenated with 'return ' to create the chunk 'return Config.option1.general' which is passed to load. The statement load('return Config.option1.general')() calls the function returned by load, and the returned value is returned again from the getOption function.

    Sample interaction:

    > getOption('option1')
    true
    > getOption('option2')
    false