具名實參:指具有名稱的實參。
將所有實參組織到乙個table中,並將這個table作為唯一的實參傳給函式。
對於引數很多的函式,有時很難記住引數的名字和引數的順序以及哪些引數是可選的。通過table可以在呼叫這類函式時可以隨意指定引數的順序,並且可以只傳遞需要設定的引數。這就是具名實參的好處。
函式的引數機制中,最基礎的方式是在呼叫乙個函式時,實參通過它在引數中的位置與形參匹配起來。
function
createpanel
(x, y, width, height, background ,border)
print(x)
print(y)
print(width)
print(height)
print(background)
print(border)
endcreatepanel(1,2,200,160,"white",1) --引數列表很長的時候,我們很難記起每個引數的具體含義
-- result:
-->1
-->2
-->200
-->160
-->white
-->1
以這種方式呼叫函式,在函式引數列表較長的時候,很難記清各個引數代表什麼意思,如果我們給實參指定具體的名字,就可以通過名稱來輕鬆匹配形參。我們將所有實參組織到乙個table中作為函式唯一的引數,來實現具名實參。
function
createpanel
( opt )
print(opt.x)
print(opt.y)
print(opt.width)
print(opt.height)
print(opt.background)
print(opt.border)
endcreatepanel() -- 引數是匿名table
-- result:
-->1
-->2
-->200
-->160
-->white
-->1
datatable =
createpanel(datatable) --另一種寫法
-- result:
-->1
-->2
-->200
-->160
-->white
-->1
有的時候,我們為一些引數設定了預設值,只想為某些引數賦值,其他引數使用預設值。這種情況下我們借助具名實參和另外乙個函式來實現可選引數函式。
--[[createpanel函式可以根據要求檢查一些必填的函式,或者為某些值新增預設值。"_createpanel"才是真正用於建立視窗的函式]]
-- 用於檢查引數和設定預設引數值的函式
function
createpanel
( opt )
-- 檢查引數型別
iftype(opt.height) ~= "number"
then
error("no height")
endiftype(opt.width) ~= "number"
then
error("no width")
end-- width和height為必填的具名引數,其他引數可選
_createpanel(opt.x or
0, --預設值為0
opt.y or
0, --預設值為0
opt.width , --無預設值
opt.height, --無預設值
opt.background or
"white", --預設值為「white」
opt.border or
1) --預設值為1
end-- 真正實現功能的函式
function
_createpanel
( x, y , width , height, background, border)
print(x)
print(y)
print(width)
print(height)
print(background)
print(border)
end
使用可選引數函式
createpanel()
-- result: 為每個引數賦值
-->1
-->2
-->200
-->160
-->white
-->1
createpanel()
-- result: 只為width、height賦值
-->0
-->0
-->200
-->100
-->white
-->1
createpanel()
-- result: 出錯 函式引數width和height沒有預設值必須為其賦值,否則會出錯
參考: 通過指標修改外邊實參
函式內容如何改變外部的實參?對於上面的問題,只有c中的指標能夠完成,基本資料型別作為函式實參,只是將值純粹的傳遞給形參,形參的改變並不影響實參.1 include2 3void swap char v1,char v2 1112 13int main int argc,const char argv...
C 之命名實參 通過乙個案例告訴你什麼是命名實參
有了命名實參,您將不再需要記住或查詢形參在所呼叫方法的形參列表中的順序。可以按形參名稱指定每個實參的形參。語法如下 par name value par name指向其傳遞value的形參名稱,par name呼叫的方法必須指定乙個有效的形參。下面看具體案例 如果乙個形參能被第二個形參整除 返回tr...
通過微服務名實現動態路由
預設情況下gateway會根據註冊中心的服務列表,以註冊中心上微服務名為路徑建立動態路由進行 從而實現動態路由的功能。1 修改9527的yml 需要注意的是uri的協議為lb,表示啟用gateway的負載均衡功能。lb servicename是spring cloud gateway在微服務中自動為...