Passing arguments to scripts
Introduction
Providing arguments to the script
In many cases, it will be useful to provide your scripts with arguments. For example, for choosing the name of an element, the color of a material or whatever other parameter you may be interested in.
Emp allows providing arguments to your scripts. This is easily done by writing all the arguments after the command
emp - script Argument1 Argument2 ...Lets write a script called Hello.lua that takes advantage of this:
-- We tell Emp that we will not make calculations
auto_solve = false
-- capture the first argument.
-- The second argument will be stored in argv[2], and so on.
name = argv[1]
-- Greet
print("Hello",name)And run it
emp - Hello.lua JohnAnd the results are
Hello JohnDealing with absence of argument
Sometimes people make mistakes and do not provide a certain argument. For example, run the Hello.lua script without a first argument
emp - Hello.luaThe result is
Hello nilThat means that that the variable name was not initialized, which could cause a big error in other sections of the code or Emp. Lua provides at least two very simple ways of dealing with this, which are explained belo.
Throwing an error
One option is to check if the element is nil, and do something about it (e.g. raise an error)
-- We tell Emp that we will not make calculations
auto_solve = false
-- capture the first argument
name = argv[1]
-- If there is no first argument (i.e. name is nil)
-- throw an error.
if name == nil then
error("You need to provide an argument")
end
-- This section of the code will never run unless a
-- name is provided
print("Hello",name)Running this script without an argument throws an error
./Hello.lua:10 You need to provide an argumentIn any other case it will greet
Default values for arguments
Another option is to set a default value to such argument.
-- We tell Emp that we will not make calculations
auto_solve = false
-- capture the first argument...
-- if it does not exist, set it to "Jim"
name = argv[1] or "Jim"
-- Greet
print("Hello",name)Running this script without an argument prints Hello Jim; in any other case, it will greet as expected.
Last updated