Module:Yesno/doc: Difference between revisions
m 1 revision imported |
transclude |
||
| Line 1: | Line 1: | ||
{{used in system}} | <noinclude>{{pp|small=yes}} | ||
</noinclude>{{used in system}} | |||
{{Module rating|protected}} | {{Module rating|protected}} | ||
{{cascade-protected template|page=module}} | |||
This module provides a consistent interface for processing boolean or boolean-style string input. While Lua allows the <code>true</code> and <code>false</code> boolean values, wikicode templates can only express boolean values through strings such as "yes", "no", etc. This module processes these kinds of strings and turns them into boolean input for Lua to process. It also returns <code>nil</code> values as <code>nil</code>, to allow for distinctions between <code>nil</code> and <code>false</code>. The module also accepts other Lua structures as input, i.e. booleans, numbers, tables, and functions. If it is passed input that it does not recognise as boolean or <code>nil</code>, it is possible to specify a default value to return. | This module provides a consistent interface for processing boolean or boolean-style string input. While Lua allows the <code>true</code> and <code>false</code> boolean values, wikicode templates can only express boolean values through strings such as "yes", "no", etc. This module processes these kinds of strings and turns them into boolean input for Lua to process. It also returns <code>nil</code> values as <code>nil</code>, to allow for distinctions between <code>nil</code> and <code>false</code>. The module also accepts other Lua structures as input, i.e. booleans, numbers, tables, and functions. If it is passed input that it does not recognise as boolean or <code>nil</code>, it is possible to specify a default value to return. | ||
| Line 25: | Line 27: | ||
yesno('true') | yesno('true') | ||
yesno('t') | yesno('t') | ||
yesno('on') | |||
yesno('1') | yesno('1') | ||
yesno(1) | yesno(1) | ||
| Line 34: | Line 37: | ||
yesno('false') | yesno('false') | ||
yesno('f') | yesno('f') | ||
yesno('off') | |||
yesno('0') | yesno('0') | ||
yesno(0) | yesno(0) | ||
| Line 40: | Line 44: | ||
-- A nil value always returns nil: | -- A nil value always returns nil: | ||
yesno(nil) | yesno(nil) | ||
yesno() | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| Line 65: | Line 70: | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
-- These return nil: | -- These return nil: | ||
yesno(nil) | |||
yesno('foo') | yesno('foo') | ||
yesno({}) | yesno({}) | ||
yesno(5) | yesno(5) | ||
yesno('') | |||
yesno(function() return 'This is a function.' end) | yesno(function() return 'This is a function.' end) | ||
yesno(nil, true) | yesno(nil, true) | ||
| Line 76: | Line 83: | ||
yesno({}, true) | yesno({}, true) | ||
yesno(5, true) | yesno(5, true) | ||
yesno('', true) | |||
yesno(function() return 'This is a function.' end, true) | yesno(function() return 'This is a function.' end, true) | ||
| Line 82: | Line 90: | ||
yesno({}, 'bar') | yesno({}, 'bar') | ||
yesno(5, 'bar') | yesno(5, 'bar') | ||
yesno('', 'bar') | |||
yesno(function() return 'This is a function.' end, 'bar') | yesno(function() return 'This is a function.' end, 'bar') | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Line 95: | Line 97: | ||
===Handling nil results=== | ===Handling nil results=== | ||
By definition | By definition: | ||
<syntaxhighlight lang="lua"> | |||
yesno(nil) -- Returns nil. | yesno(nil) -- Returns nil. | ||
yesno('foo') -- Returns nil. | yesno('foo') -- Returns nil. | ||
| Line 106: | Line 108: | ||
To get the binary <syntaxhighlight lang="lua" inline>true/false</syntaxhighlight>-only values, use code like: | To get the binary <syntaxhighlight lang="lua" inline>true/false</syntaxhighlight>-only values, use code like: | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
myvariable = yesno(value | myvariable = yesno(value or false) -- When value is nil, result is false. | ||
myvariable = yesno(value | myvariable = yesno(value or true) -- When value is nil, result is true. (XXX: when value is false, result is true...) | ||
myvariable = yesno('foo') or false -- Unknown string returns nil, result is false. | myvariable = yesno('foo') or false -- Unknown string returns nil, result is false. | ||
myvariable = yesno('foo', true) or false -- Default value (here: true) applies, result is true. | myvariable = yesno('foo', true) or false -- Default value (here: true) applies, result is true. | ||
</syntaxhighlight> | |||
Better suggestions: | |||
<syntaxhighlight lang="lua"> | |||
local myvariable = yesno(value) | |||
if myvariable == nil then -- value is nil or an unrecognized string | |||
myvariable = true | |||
end | |||
-- more efficient when value is nil, but more verbose | |||
-- (note the default result has to be written twice) | |||
local myvariable | |||
if value == nil then | |||
myvariable = true | |||
else | |||
myvariable = yesno(value, true) | |||
end | |||
</syntaxhighlight><!-- | </syntaxhighlight><!-- | ||
| Line 115: | Line 134: | ||
[[Category:Lua metamodules]] | [[Category:Lua metamodules]] | ||
}}</includeonly> | }}</includeonly> | ||
<noinclude> | |||
[[Category:Module documentation pages]] | |||
</noinclude> | |||