默认参数
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
是相关参数的合理值,则此惯用法将不起作用。)