預設引數
function sayHello(name)
print("Hello, " .. name .. "!")
end
該功能是一個簡單的功能,它運作良好。但是如果我們只是呼叫 sayHello()
會怎麼樣?
stdin:2: attempt to concatenate local 'name' (a nil value)
stack traceback:
stdin:2: in function 'sayHello'
stdin:1: in main chunk
[C]: in ?
那不是很好。有兩種方法可以解決這個問題:
-
你立即從函式返回:
function sayHello(name) if not (type(name) == "string") then return nil, "argument #1: expected string, got " .. type(name) end -- Bail out if there's no name. -- in lua it is a convention to return nil followed by an error message on error print("Hello, " .. name .. "!") -- Normal behavior if name exists. end
-
你設定了預設引數。
要做到這一點,只需使用這個簡單的表示式
function sayHello(name)
name = name or "Jack" -- Jack is the default,
-- but if the parameter name is given,
-- name will be used instead
print("Hello, " .. name .. "!")
end
成語 name = name or "Jack"
的工作原理是因為 Lua 中的 or
短路。如果 or
左側的專案不是 nil
或 false
,那麼右側永遠不會被評估。另一方面,如果沒有引數呼叫 sayHello
,那麼 name
將是 nil
,因此字串 Jack
將被分配給 name
。 (請注意,如果布林值 false
是相關引數的合理值,則此慣用法將不起作用。)