模組:Sandbox/C8H17OH/ParamGroup/doc
此頁面為 Module:Sandbox/C8H17OH/ParamGroup 的說明文件
本模塊用於將以一個參數的形式傳入的「參數組」解析成多個參數並傳給特定模板。
參數
本模塊的接口函數名為main
,參數包括:
參數名 | 描述 | 默認值 |
---|---|---|
template 、tl 、1 |
模板名 | (必填) |
args 、2 |
「參數組」 | 空 |
delim |
組內參數間分隔符 | {{!}}
|
assign |
鍵-值間賦值號 | {{=}}
|
regex |
是否使用正則表達式,非空為真 | 空 |
示例
以下各行
{{#invoke:Sandbox/C8H17OH|main|template=foo|args=arg1{{!}}arg2{{!}}key1{{=}}value1{{!}}key2{{=}}value2}} {{#invoke:Sandbox/C8H17OH|main|template=foo|args=arg1; arg2; key1:value1; key2:value2|delim=;|assign=:}} {{#invoke:Sandbox/C8H17OH|main|template=foo|args=arg1; arg2;key1:value1; key2:value2|delim=[;;]|assign=[::]|regex=on}}
結果都等同於
{{foo|arg1|arg2|key1=value1|key2=value2}}
用途
可以用於批量調用多參數模板。
詳解 |
---|
需求:批處理模板有時候我們會試圖利用解析器函數 例如,假設我們想在{{人物信息}}的【髮色】欄填寫7種髮色,那麼代碼一般為: |发色={{发色|赤}}、{{发色|橙}}、{{发色|黄}}、{{发色|绿}}、{{发色|青}}、{{发色|蓝}}、{{发色|紫}} 假如我們有一個「批處理模板」 |发色={{多种发色|赤|橙|黄|绿|青|蓝|紫}} 對於熟練掌握fornumargs等解析器函數的資深編輯者,構造這樣一個批處理模板並不是特別困難: {{#fornumargs:num|value|{{#ifexpr:{{#var:num}}>1|、}}{{发色|{{#var:value}}}} 上面的例子中「核模板」{{髮色}}有且只有一個參數。然而,我們的核模板常常是(或者需要是)具有多個參數的,參數的數量可能不固定,參數類型可能既有匿名又有實名,這時候構造一個批處理模板就很不簡單了,至少本模塊的創建者未能成功做到,直到創建並使用了本模塊。 解決方案:參數組如果我們可以把意圖傳入核模板的多個參數打包成一個「參數組」,在批處理模板的每個參數中填入一個參數組,似乎就可以實現批處理功能了。為此,觀察模板使用的一般形式: {{foo|arg1|arg2|key1=value1|key2=value2}}
arg1|arg2|key1=value1|key2=value2 其中管道符 為了將「參數組」打包在一個參數中,我們需要將管道符和等號替換成不會被直接解析的形式: arg1{{!}}arg2{{!}}key1{{=}}value1{{!}}key2{{=}}value2 這樣在批處理模板中就可以這樣填寫: {{foo batch |case1_arg1{{!}}case1_arg2{{!}}key1{{=}}case1_value1{{!}}key2{{=}}case1_value2 |case2_arg1{{!}}case2_arg2{{!}}key1{{=}}case2_value1{{!}}key2{{=}}case2_value2 |case3_arg1{{!}}case3_arg2{{!}}key1{{=}}case3_value1{{!}}key2{{=}}case3_value2 }} 如果嫌 {{foo batch |case1_arg1; case1_arg2; key1:case1_value1; key2:case1_value2 |case2_arg1; case2_arg2; key1:case2_value1; key2:case2_value2 |case3_arg1; case3_arg2; key1:case3_value1; key2:case3_value2 }} 從批處理模板的使用者的角度,這樣的代碼已經非常簡潔和清晰了。那麼,如何實現 實現:使用本模塊可以利用本模塊,構造 {{#fornumargs:num|value| {{#invoke:Sandbox/C8H17OH|main|template=foo|args={{#var:value}}}} }} 如果替換了分隔符和賦值號,則為: {{#fornumargs:num|value| {{#invoke:Sandbox/C8H17OH|main|tl=foo|args={{#var:value}}|delim=;|assign=:}} }} 還可以啟用正則表達式來實現更豐富的分隔符和賦值號,例如令二者都支持全形和半角: {{#fornumargs:num|value| {{#invoke:Sandbox/C8H17OH|main|foo|{{#var:value}}|delim=[;;]|assign=[::]|regex=on}} }} 用例其他用途當然,本模塊也可以用於批處理模板以外的用途,雖然模塊創建者並未想到其他必須這樣構造「參數組」而不能直接給模板傳參的場景。 |
注意事項
根據已有測試經驗,與一般的模板使用類似:
- 在分隔符、賦值號前後的空白字符不會影響正常使用。
- 組內參數中不能出現分隔符,匿名參數的值中、實名參數的鍵中不能出現賦值號。
- 對於這點,目前沒有像
{{!}}
和{{=}}
一樣的解決辦法,只能要求儘可能選用不會出現的符號。
- 對於這點,目前沒有像