Modul:Yesno: Forskjell mellom sideversjoner
(fix logic for the case where the first positional parameter is "¬") |
(removing code that's no longer used) |
||
Linje 23: | Linje 23: | ||
args = pframe.args |
args = pframe.args |
||
for k,v in pairs(args) do |
for k,v in pairs(args) do |
||
any = true |
|||
retvals[k] = v |
retvals[k] = v |
||
end |
end |
||
Linje 35: | Linje 34: | ||
end |
end |
||
val = val:lower() -- |
val = val:lower() -- Make lowercase. |
||
val = val:match'^%s*(.*%S)' or '' -- Trim whitespace. |
val = val:match'^%s*(.*%S)' or '' -- Trim whitespace. |
||
Sideversjonen fra 23. mar. 2013 kl. 12:29
Lua-feil i Modul:Message_box, linje 165: attempt to call upvalue 'yesno' (a table value).
Denne modulen tilbyr et konsekvent grensesnitt for å behandle boolske inndata, inkludert boolske tekststrengrepresentasjoner. Mens Lua bruker true
og false
som boolske verdier kan maler i wikikode bare representere boolske verdier i form av tekststrenger som "ja", "nei" etc. Denne modulen prosesserer slike strenger og konverterer dem til boolske verdier som kan brukes av Lua. Den returnerer også verdien nil
som nil
slik at man kan skille mellom nil
og false
. Modulen aksepterer også andre Lua-strukturer som inndata, f.eks. bool, tall, tabeller og funksjoner. Det er mulig å spesifisere en defaultverdi som skal returneres dersom modulen får inndata som den ikke gjenkjenner som en boolsk verdi eller nil
.
Syntaks
yesno(value, default)
value
er verdien som skal bli testet. Varianter av boolske verdier evalueres til enten true
eller false
, mens nil
alltid evalueres til nil
. Andre verdier evalueres til default
.
Bruk
Først må du laste modulen. Den kan bare lastes fra andre Lua-moduler, ikke fra vanlige wikisider. Fra vanlige wikisider kan du bruke malen {{yesno}}.
local yesno = require('Module:Yesno')
Noen inndataverdier returnerer alltid true
, mens andre alltid returnerer false
. nil
returnerer alltid nil
.
-- Disse skal alltid returnere true:
yesno('ja')
yesno('j')
yesno('yes')
yesno('y')
yesno('true')
yesno('1')
yesno(1)
yesno(true)
-- Disse skal alltid returnere false:
yesno('nei')
yesno('no')
yesno('n')
yesno('false')
yesno('0')
yesno(0)
yesno(false)
-- En nil-verdi returnerer alltid nil:
yesno(nil)
Tekstverdier konverteres til små bokstaver før de blir sammenliknet:
-- Disse skal alltid returnere true:
yesno('JA')
yesno('Yes')
yesno('YES')
yesno('yEs')
yesno('Y')
yesno('tRuE')
-- Disse skal alltid returnere false:
yesno('nEi')
yesno('No')
yesno('NO')
yesno('nO')
yesno('N')
yesno('fALsE')
Du kan angi en defaultverdi som yesno returnerer dersom den får andre inndata enn de som er nevnt over. Dersom du ikke angir en defaultverdi returnerer modulen nil
for slike verdier.
-- Disse returnerer nil:
yesno('foo')
yesno({})
yesno(5)
yesno(function() return 'This is a function.' end)
-- Disse returnerer true:
yesno('foo', true)
yesno({}, true)
yesno(5, true)
yesno(function() return 'This is a function.' end, true)
-- Disse returnerer "bar":
yesno('foo', 'bar')
yesno({}, 'bar')
yesno(5, 'bar')
yesno(function() return 'This is a function.' end, 'bar')
Legg merke til at en tom streng oppfører seg på samme måte:
yesno('') -- Returnerer nil.
yesno('', true) -- Returnerer true.
yesno('', 'bar') -- Returnerer "bar".
Legg merke til: Selv om en tom streng vanligvis blir evaluert til false i wikitekst og til true i Lua evalueres den til nil av denne modulen.
local p = {} function p.yesno(frame) -- defaults local retvals = { yes = "yes", no = "", ["¬"] = "" } -- Allow arguments to override defaults. -- 'any' tracks the presence of any arguments at all. local args = frame.args local any = false for k,v in pairs(args) do any = true retvals[k] = v end -- If there are no arguments, try and get them from the parent frame. if any == false then local pframe = frame:getParent() args = pframe.args for k,v in pairs(args) do retvals[k] = v end end val = args[1] -- First deal with the case if val is nil or "¬", then deal with other cases. if val == nil or val == '¬' then return retvals['¬'] end val = val:lower() -- Make lowercase. val = val:match'^%s*(.*%S)' or '' -- Trim whitespace. if val == '' then return retvals['blank'] or retvals['no'] elseif val == 'n' or val == 'no' or val == '0' then return retvals['no'] elseif val == 'y' or val == 'yes' or val == '1' or retvals['def'] == nil then return retvals['yes'] else return retvals['def'] end end return p