Return a clear status when conversion may fail.

status flag A boolean status can separate successful values from fallback text without raising an error.

Parse Status

raw
parse_status.lua
Replay: real traced execution (multi-file project)
local raw = "21"
local number = tonumber(raw)
local ok = number ~= nil
local outcome = "invalid"

if ok then
  outcome = tostring(number * 2)
end

print("raw=" .. raw)
print("ok=" .. tostring(ok))
print("outcome=" .. outcome)
local raw = "abc"
local number = tonumber(raw)
local ok = number ~= nil
local outcome = "invalid"

if ok then
  outcome = tostring(number * 2)
end

print("raw=" .. raw)
print("ok=" .. tostring(ok))
print("outcome=" .. outcome)
local raw = "8"
local number = tonumber(raw)
local ok = number ~= nil
local outcome = "invalid"

if ok then
  outcome = tostring(number * 2)
end

print("raw=" .. raw)
print("ok=" .. tostring(ok))
print("outcome=" .. outcome)
  1. raw ← 21, number ← 21, ok ← true, outcome ← invalid

    1local raw→ 21 = "21" --@raw="abc", "8"2local number→ 21 = tonumber(raw21)3local ok→ true = number21 ~= nil4local outcome→ invalid = "invalid"
  2. outcome ← 42

    6if oktrue then7  outcome→ 42 = tostring(number21 * 2)8end
  3. print("raw=" .. raw)

    10print("raw=" .. raw21)11print("ok=" .. tostring(oktrue))12print("outcome=" .. outcome42)
    outputraw=21
    ok=true
    outcome=42
  1. raw ← abc, number ← nil, ok ← false, outcome ← invalid

    1local raw→ abc = "abc"2local number→ nil = tonumber(rawabc)3local ok→ false = numbernil ~= nil4local outcome→ invalid = "invalid"56if ok then7  outcome = tostring(number * 2)8end910print("raw=" .. rawabc)11print("ok=" .. tostring(okfalse))12print("outcome=" .. outcomeinvalid)
    outputraw=abc
    ok=false
    outcome=invalid
  1. raw ← 8, number ← 8, ok ← true, outcome ← invalid

    1local raw→ 8 = "8"2local number→ 8 = tonumber(raw8)3local ok→ true = number8 ~= nil4local outcome→ invalid = "invalid"
  2. outcome ← 16

    6if oktrue then7  outcome→ 16 = tostring(number8 * 2)8end
  3. print("raw=" .. raw)

    10print("raw=" .. raw8)11print("ok=" .. tostring(oktrue))12print("outcome=" .. outcome16)
    outputraw=8
    ok=true
    outcome=16