Garry's Mod Wiki

Revision Difference

no_value#519454

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. Examples of the difference: ``` print(type()) print(type(nil)) ``` Returns:<br/>no value<br/>nil 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 <pre class="inline">return</pre> and <pre class="inline">return nil</pre> unique statements. Functions that return nothing technically return no value, making `return` and `return nil` unique statements. Example of this difference: ``` local function a() end -- Same as a local function b() return end -- Difference from a and b local function c() return nil end print(type(a())) print(type(b())) print(type(c())) ``` Returns:<br/>no value<br/>no value<br/>nil Lua variables cannot hold no value and instead will default to <page>nil</page>. Example of this behaviour: ``` local function a() end local d = a() print(type(d)) ``` Returns:<br/>nil no value will be coerced to nil in value comparisons. Example of this behaviour: ``` local function a() end print(a() == nil) print(not a()) ``` Returns:<br/>true<br/>true