48

I want to exit the execution of a Lua script on some condition. For example:

content = get_content()
if not content then   
-- ( Here i want some kind of exit function )
next_content = get_content()
--example there can lot of further checks

Here I want that if I am not getting content my script suppose to terminate is should not go to check to next.

Luke100000
  • 1,395
  • 2
  • 6
  • 18
Prashant Gaur
  • 9,540
  • 10
  • 49
  • 71

4 Answers4

62

Use os.exit() or just return from some "main" function if your script is embedded.

Oleg V. Volkov
  • 21,719
  • 4
  • 44
  • 68
27
os.exit()

kill process by sending a signal

do return end

stop execution

The two methods are not equal if you want to write and execute some luacode in the interpreter after stopping the execution by launching your program using the -i flag.

th -i main.lua
Matej
  • 9,548
  • 8
  • 49
  • 66
freedoo
  • 691
  • 1
  • 5
  • 12
17

extract from the lua api doc :

For syntactic reasons, a break or return can appear only as the last statement of a block (in other words, as the last statement in your chunk or just before an end, an else, or an until). For instance, in the next example, break is the last statement of the then block.

local i = 1
while a[i] do
  if a[i] == v then break end
  i = i + 1
end

Usually, these are the places where we use these statements, because any other statement following them is unreachable. Sometimes, however, it may be useful to write a return (or a break) in the middle of a block; for instance, if you are debugging a function and want to avoid its execution. In such cases, you can use an explicit do block around the statement:

function foo ()
  return          --<< SYNTAX ERROR
  -- `return' is the last statement in the next block
  do return end   -- OK
  ...             -- statements not reached
end
Mali
  • 2,990
  • 18
  • 18
6

In lua 5.2.0-beta-rc1+, you can add a label at the end of your code called ::exit:: or something of the like, and then whenever you need to exit the program just call it like this:

goto exit