Garry's Mod Wiki

Revision Difference

no_value#510680

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 &lt;pre class="inline"&gt;return&lt;/pre&gt; and &lt;pre class="inline"&gt;return nil&lt;/pre&gt; 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