Jump to content

Module:Sandbox/Labratscientist

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Labratscientist (talk | contribs) at 05:53, 19 February 2025 (fix). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
local p = {}

p.hello = function( frame )
    local str = "Hello World!"
    return str
end

function p.hello_to(frame)
	local name = frame.args[1]
	return "Hello, " .. name .. "!"
end

function p.count_fruit(frame)
	local num_bananas = tonumber(frame.args.bananas) or 0
	local num_apples = tonumber(frame.args.apples) or 0
	
	local conj_bananas = num_bananas == 1 and 'banana' or 'bananas'
    local conj_apples = num_apples == 1 and 'apple' or 'apples'
    return 'I have ' .. num_bananas ..  ' ' .. conj_bananas .. ' and ' .. num_apples .. ' ' .. conj_apples
end

local function lucky(a, b) -- One can define custom functions for use. Here we define a function 'lucky' that has two inputs a and b. The names are of your choice.
	if b == 'yeah' then -- Condition: if b is the string 'yeah'. Strings require quotes. Remember to include 'then'.
		return a .. ' is my lucky number.' -- Outputs 'a is my lucky number.' if the above condition is met. The string concatenation operator is denoted by 2 dots.
	else -- If no conditions are met, i.e. if b is anything else, output specified on the next line.  'else' should not have 'then'.
		return a -- Simply output a.
	end -- The 'if' section should end with 'end'.
end -- As should 'function'.

function p.Name2(frame)
	-- The next five lines are mostly for convenience only and can be used as is for your module. The output conditions start on line 50.
	local pf = frame:getParent().args -- This line allows template parameters to be used in this code easily. The equal sign is used to define variables. 'pf' can be replaced with a word of your choice.
	local f = frame.args -- This line allows parameters from {{#invoke:}} to be used easily. 'f' can be replaced with a word of your choice.
	local M = f[1] or pf[1] -- f[1] and pf[1], which we just defined, refer to the first parameter. This line shortens them as 'M' for convenience. You could use the original variable names.
	local m = f[2] or pf[2] -- Second shortened as 'm'.
	local l = f.lucky or pf.lucky -- A named parameter 'lucky' is shortend as l. Note that the syntax is different from unnamed parameters.
	if m == nil then -- If the second parameter is not used.
		return 'Lonely' -- Outputs the string 'Lonely' if the first condition is met.
	elseif M > m then -- If the first condition is not met, this line tests a second condition: if M is greater than m.
		return lucky(M - m, l) -- If the condition is met, the difference is calculated and passed to the self defined function along with l. The output depends on whether l is set to 'yeah'.
	else
		return 'Be positive!'
	end
end

p.count_years = function(s)
    local years = 0
    
    for part in s:gmatch("%d+%-?%d*") do
        local start_year, end_year = part:match("(%d+)%-(%d+)")
        
        if start_year and end_year then
            start_year, end_year = tonumber(start_year), tonumber(end_year)
            for year = start_year, end_year do
                years = years + 1
            end
        else
            years = years + 1
        end
    end
    return years
end

-- Example usage

return p    --All modules end by returning the variable containing their functions to Wikipedia.
-- Now we can use this module by calling {{#invoke: Example | hello }},
-- {{#invoke: Example | hello_to | foo }}, or {{#invoke:Example|count_fruit|bananas=5|apples=6}}
-- Note that the first part of the invoke is the name of the Module's wikipage,
-- and the second part is the name of one of the functions attached to the 
-- variable that you returned.

-- The "print" function is not allowed in Wikipedia.  All output is accomplished
-- via strings "returned" to Wikipedia.