Without a return value

Control flow / Jump statements / "return" statement

local function print_main_data()
  print("printMainData")
end

local function print_other_data()
  print("printOtherData")
end

local function print_some_data(print_all)
  print_main_data()
  if not print_all then
    -- return without a value: leave at once
    return
  end
  print_other_data()
end

print("print_all = false")
print_some_data(false)
print("print_all = true")
print_some_data(true)

-- return must be the last statement of a block
local bad, bad_err = load("return; x = 1")
-- bad = nil
-- bad_err = [string "return; x = 1"]:1:
-- <eof> expected near 'x'

-- do return end can stand anywhere
local good = load("do return end x = 1")
-- type(good) = function

print("bad = " .. tostring(bad))
print("bad_err = " .. bad_err)
print("type(good) = " .. type(good))