Revision Difference
no_value#547751
<cat>Dev.Lua</cat>⤶
no value is a type in Lua representing no data. While this mostly appears the same as <page>nil</page> from the Lua state, C functions will consider this distinct. This difference can be displayed from Lua with the <page>Global.type</page> function which, unlike [vanilla Lua's type function](https://www.lua.org/pil/2.html), will return `no value` when given no data.⤶
⤶
<example>⤶
<description>Examples of the difference:</description>⤶
<code>⤶
print( type() )⤶
print( type( nil ) )⤶
</code>⤶
<output><br/>no value<br/>nil</output>⤶
</example>⤶
⤶
In vanilla Lua 5.1-5.3, calling <page>Global.type</page>() will result in the error `bad argument #1 to 'type' (value expected)` instead of returning `no value`, making this property unique to GLua.⤶
⤶
Functions that return nothing technically return no value, making `return` and `return nil` unique statements.⤶
⤶
<example>⤶
<description>Examples of the difference:</description>⤶
<code>⤶
local function a()⤶
end⤶
⤶
-- Same as a⤶
local function b()⤶
return⤶
end⤶
⤶
-- Different from a and b⤶
local function c()⤶
return nil⤶
end⤶
⤶
print( type( a() ) )⤶
print( type( b() ) )⤶
print( type( c() ) )⤶
</code>⤶
<output><br/>no value<br/>no value<br/>nil</output>⤶
</example>⤶
⤶
Lua variables cannot hold no value and instead will default to <page>nil</page>.⤶
⤶
<example>⤶
<description>Example of this behaviour:</description>⤶
<code>⤶
local function a()⤶
end⤶
⤶
local d = a()⤶
print( type( d ) )⤶
</code>⤶
<output>nil</output>⤶
</example>⤶
⤶
no value will be coerced to nil in value comparisons.⤶
⤶
<example>⤶
<description>Example of this behaviour:</description>⤶
<code>⤶
local function a()⤶
end⤶
⤶
print( a() == nil )⤶
print( not a() )⤶
</code>⤶
<output><br/>true<br/>true</output>⤶
</example><title>No value</title>⤶
⤶
When reference says there is <page>no value</page>, it simply means that the data type is missing, unused or <page>nil</page>.