Help:Lua:修订间差异

帮助页面
添加的内容 删除的内容
无编辑摘要
无编辑摘要
第237行: 第237行:
表要用一对花括号创建。空表是<code>{}</code>。创建有多个字段的表时,逗号和分号可以分隔表中的各个字段。表的内容可以用以下形式表示:
表要用一对花括号创建。空表是<code>{}</code>。创建有多个字段的表时,逗号和分号可以分隔表中的各个字段。表的内容可以用以下形式表示:


* <code style="white-space:nowrap">[''[[#Expressions|表达式1]]''] = ''[[#Expressions|表达式2]]''</code>,意思是键为''表达式1'',它与值''表达式2''匹配。即''表达式1''的值是''表达式2''。
* <code>[''[[#Expressions|表达式1]]''] = ''[[#Expressions|表达式2]]''</code>,意思是键为''表达式1'',它与值''表达式2''匹配。即''表达式1''的值是''表达式2''。
* <code style="white-space:nowrap">''[[#name|名称]]'' = ''[[#Expressions|表达式]]''</code>,它等价于<code style="white-space:nowrap">["''名称''"] = ''表达式''</code>。
* <code>''[[#name|名称]]'' = ''[[#Expressions|表达式]]''</code>,它等价于<code>["''名称''"] = ''表达式''</code>。
* <code>''[[#Expressions|表达式]]''</code>大致相当于<code style="white-space:nowrap">[''i''] = ''表达式''</code>,在这里''i''是在这个表中从1开始排序的正整数。如果最后一个字段和表达式有多个值,所有的值都会使用;否则只有第一个会保留。
* <code>''[[#Expressions|表达式]]''</code>大致相当于<code>[''i''] = ''表达式''</code>,在这里''i''是在这个表中从1开始排序的正整数。如果最后一个字段和表达式有多个值,所有的值都会使用;否则只有第一个会保留。


表中的字段用中括号访问,例如<code>table[key]</code>。字符串键(key)同样也可以用作点来表示的[[#name|名字]],例如<code>table.key</code>就与<code>table['key']</code>等价。调用表中的一个函数也可以用冒号,例如<code style="white-space:nowrap">table:func( ... )</code>,相当于<code style="white-space:nowrap">table['func']( table, ... )</code>或者<code style="white-space:nowrap">table.func( table, ... )</code>。
表中的字段用中括号访问,例如<code>table[key]</code>。字符串键(key)同样也可以用作点来表示的[[#name|名字]],例如<code>table.key</code>就与<code>table['key']</code>等价。调用表中的一个函数也可以用冒号,例如<code>table:func( ... )</code>,相当于<code>table['func']( table, ... )</code>或者<code>table.func( table, ... )</code>。


{{Anchor|sequence}}
{{Anchor|sequence}}
第311行: 第311行:
以下元表字段可以影响表本身:
以下元表字段可以影响表本身:
; __index
; __index
: 如果表访问<code>t[key]</code>返回nil就使用这个。 如果这个字段的值是表,访问就会在这个表中重复进行,例如<code>__index[''键'']</code>(会调用这个表的元表的__index)。 如果这个字段的值是函数,函数就会像<code style="white-space:nowrap">__index( t, ''键'' )</code>这样调用。 [[#rawget|rawget()]]函数会绕过这个元方法。
: 如果表访问<code>t[key]</code>返回nil就使用这个。 如果这个字段的值是表,访问就会在这个表中重复进行,例如<code>__index[''键'']</code>(会调用这个表的元表的__index)。 如果这个字段的值是函数,函数就会像<code>__index( t, ''键'' )</code>这样调用。 [[#rawget|rawget()]]函数会绕过这个元方法。
; __newindex
; __newindex
: 这个元方法用于将键赋值到表中,即<code style="white-space:nowrap">t[''键'']=''值''</code>,但是<code style="white-space:nowrap">[[#rawget|rawget]]( t, key )</code>会返回空值(nil)。 如果这个字段的值是表,赋值就会在这个表中重复进行,例如<code style="white-space:nowrap">__newindex[''键''] = ''值''</code>(会调用这个表的元表的__newindex)。 如果这个字段的值是函数,那么函数就会像这样调用:<code style="white-space:nowrap">__newindex( t, ''键'', ''值'')</code>。 [[#rawset|rawset()]]函数会绕过这个元方法。
: 这个元方法用于将键赋值到表中,即<code>t[''键'']=''值''</code>,但是<code>[[#rawget|rawget]]( t, key )</code>会返回空值(nil)。 如果这个字段的值是表,赋值就会在这个表中重复进行,例如<code>__newindex[''键''] = ''值''</code>(会调用这个表的元表的__newindex)。 如果这个字段的值是函数,那么函数就会像这样调用:<code>__newindex( t, ''键'', ''值'')</code>。 [[#rawset|rawset()]]函数会绕过这个元方法。
; __call
; __call
: 对表应用函数调用语法<code style="white-space:nowrap">t( ... )</code>时,就会使用这个元方法。 这个值必须是函数,会像<code style="white-space:nowrap">__call( t, ··· )</code>这样调用。
: 对表应用函数调用语法<code>t( ... )</code>时,就会使用这个元方法。 这个值必须是函数,会像<code>__call( t, ··· )</code>这样调用。
; {{Anchor|weak tables}}__mode
; {{Anchor|weak tables}}__mode
: 这用于使表保持弱引用(weak references)。 这个值一定是一个字符串。 默认情况下,任何一个值被作为表格中的键或值时是不会被垃圾回收的。 但如果元表字段包含字母k,且没有非弱引用,键可能会被作为垃圾收集。而且如果包含v则值有可能也会作为垃圾收集;其他的情况,对应的键和值都会从表中移除。 注意,如果在表用作元表之后字段被改变,则行为未定义。
: 这用于使表保持弱引用(weak references)。 这个值一定是一个字符串。 默认情况下,任何一个值被作为表格中的键或值时是不会被垃圾回收的。 但如果元表字段包含字母k,且没有非弱引用,键可能会被作为垃圾收集。而且如果包含v则值有可能也会作为垃圾收集;其他的情况,对应的键和值都会从表中移除。 注意,如果在表用作元表之后字段被改变,则行为未定义。
第389行: 第389行:
| / || 除法 || a / b || __div || 除以零不会出错,会返回NaN或者无穷大
| / || 除法 || a / b || __div || 除以零不会出错,会返回NaN或者无穷大
|-
|-
| % || 模运算 || a % b || __mod || 定义为<code style="white-space:nowrap">a % b == a - math.floor( a / b ) * b</code>
| % || 模运算 || a % b || __mod || 定义为<code>a % b == a - math.floor( a / b ) * b</code>
|-
|-
| ^ || 幂运算 || a ^ b || __pow || 允许非整数指数
| ^ || 幂运算 || a ^ b || __pow || 允许非整数指数
第400行: 第400行:
Lua的关系运算符是<code>==</code>、<code>~=</code>、<code><</code>、<code>></code>、<code><=</code>和<code>>=</code>。关系运算的结果一定是布尔值(boolean)。
Lua的关系运算符是<code>==</code>、<code>~=</code>、<code><</code>、<code>></code>、<code><=</code>和<code>>=</code>。关系运算的结果一定是布尔值(boolean)。


等于号(<code>==</code>)首先比较两个值的种类;如果两个值是不同的种类,结果为假(false)。然后比较值:空值、布尔值、数字和字符串照常比较。对于函数,则是看两个函数是否引用同一个准确的函数对象;像这样检测两个不同的(但作用相同的)匿名函数<code style="white-space:nowrap">function() end == function() end</code>一定会返回假(false)。表也会默认像函数这样比较,但是可能会由于使用__eq[[#Metatables|元方法]]而改变结果。
等于号(<code>==</code>)首先比较两个值的种类;如果两个值是不同的种类,结果为假(false)。然后比较值:空值、布尔值、数字和字符串照常比较。对于函数,则是看两个函数是否引用同一个准确的函数对象;像这样检测两个不同的(但作用相同的)匿名函数<code>function() end == function() end</code>一定会返回假(false)。表也会默认像函数这样比较,但是可能会由于使用__eq[[#Metatables|元方法]]而改变结果。


不等号(<code>~=</code>)与等于号作用相反。
不等号(<code>~=</code>)与等于号作用相反。
第406行: 第406行:
对于排序运算符,如果两者都是数字,或者两者都是字符串,则直接进行比较。其次检查元方法:
对于排序运算符,如果两者都是数字,或者两者都是字符串,则直接进行比较。其次检查元方法:


* <code style="white-space:nowrap">a < b</code>使用<code>__lt</code>
* <code>a < b</code>使用<code>__lt</code>
* <code style="white-space:nowrap">a <= b</code>使用<code>__le</code>如果可用,或者<code>__lt</code>可用,那么它等价于<code style="white-space:nowrap">not ( b < a )</code>
* <code>a <= b</code>使用<code>__le</code>如果可用,或者<code>__lt</code>可用,那么它等价于<code>not ( b < a )</code>
* <code style="white-space:nowrap">a > b</code>等价于<code style="white-space:nowrap">b < a</code>
* <code>a > b</code>等价于<code>b < a</code>
* <code style="white-space:nowrap">a >= b</code>等价于<code style="white-space:nowrap">b <= a</code>
* <code>a >= b</code>等价于<code>b <= a</code>


如果必需的元方法不可用,会产生错误。
如果必需的元方法不可用,会产生错误。
第423行: 第423行:
对于<code>not</code>,其结果一定是布尔值(true或false)。
对于<code>not</code>,其结果一定是布尔值(true或false)。


注意由<code>and</code>和<code>or</code>组成的简短语句。例如,<code style="white-space:nowrap">foo() or bar()</code>只会调用<code>bar()</code>,除非<code>foo()</code>不是在它的返回false或nil。
注意由<code>and</code>和<code>or</code>组成的简短语句。例如,<code>foo() or bar()</code>只会调用<code>bar()</code>,除非<code>foo()</code>不是在它的返回false或nil。


==== 连接运算符 ====
==== 连接运算符 ====


连接运算符就是两个点(dot),比如<code style="white-space:nowrap">a .. b</code>。如果两个操作数都是数字或字符串,它们会被转化为字符串然后返回。但是如果__concat[[#Metatables|元方法]]可用,就会使用这样的元方法。如果它存在但无效,则会产生错误。
连接运算符就是两个点(dot),比如<code>a .. b</code>。如果两个操作数都是数字或字符串,它们会被转化为字符串然后返回。但是如果__concat[[#Metatables|元方法]]可用,就会使用这样的元方法。如果它存在但无效,则会产生错误。


注意Lua的字符串是不可变的(immutable),而且Lua不提供任何类型的“字符串构造器(string builder)”,所以反复进行<code style="white-space:nowrap">a = a .. b</code>会必须为每次迭代创建一个新字符串,并最终将旧字符串作为垃圾收集。如果许多字符串都需要连接,则应使用[[#string.format|string.format()]],或将所有的字符串添加到一个[[#sequence|序列]]然后最后使用[[#table.concat|table.concat()]]连接。
注意Lua的字符串是不可变的(immutable),而且Lua不提供任何类型的“字符串构造器(string builder)”,所以反复进行<code>a = a .. b</code>会必须为每次迭代创建一个新字符串,并最终将旧字符串作为垃圾收集。如果许多字符串都需要连接,则应使用[[#string.format|string.format()]],或将所有的字符串添加到一个[[#sequence|序列]]然后最后使用[[#table.concat|table.concat()]]连接。


==== 长度运算符 ====
==== 长度运算符 ====
第458行: 第458行:
# or
# or


在同一级中,二元运算符会从左到右运算,例如<code style="white-space:nowrap">a / b / c</code>相当于<code style="white-space:nowrap">(a / b) / c</code>。幂运算和级联会从右往左,例如<code style="white-space:nowrap">a ^ b ^ c</code>相当于<code style="white-space:nowrap">a ^ (b ^ c)</code>>
在同一级中,二元运算符会从左到右运算,例如<code>a / b / c</code>相当于<code>(a / b) / c</code>。幂运算和级联会从右往左,例如<code>a ^ b ^ c</code>相当于<code>a ^ (b ^ c)</code>>


{{Anchor|Function calls}}
{{Anchor|Function calls}}
第562行: 第562行:
</syntaxhighlight>
</syntaxhighlight>


[[#select|select()]]函数就是用来作用于这些参数表达式的;特别地,如要获取参数表达式的值的数量,应当使用<code style="white-space:nowrap">select( '#', ... )</code>而非<code style="white-space:nowrap">#{ ... }</code>来数参数表达式有多少个,因为<code style="white-space:nowrap">{ ... }</code>不一定是[[#sequence|序列]]。
[[#select|select()]]函数就是用来作用于这些参数表达式的;特别地,如要获取参数表达式的值的数量,应当使用<code>select( '#', ... )</code>而非<code>#{ ... }</code>来数参数表达式有多少个,因为<code>{ ... }</code>不一定是[[#sequence|序列]]。


Lua为将函数声明和赋值提供到变量中提供语法糖;参见[[#Function declaration statements|函数声明语句]]的细节。
Lua为将函数声明和赋值提供到变量中提供语法糖;参见[[#Function declaration statements|函数声明语句]]的细节。
第588行: 第588行:


{{Anchor|block}}
{{Anchor|block}}
'''语句块(block)'''也是语句序列,就像一个代码块(chunk)。语句块可以被分隔以创建单个语句(statement):<code style="white-space:nowrap">do ''语句块'' end</code>。这些通常用来限制局部变量的作用范围,或者在另一个块的中间加入<code>return</code>或<code>break</code>。
'''语句块(block)'''也是语句序列,就像一个代码块(chunk)。语句块可以被分隔以创建单个语句(statement):<code>do ''语句块'' end</code>。这些通常用来限制局部变量的作用范围,或者在另一个块的中间加入<code>return</code>或<code>break</code>。


==== 赋值 ====
==== 赋值 ====
<code style="white-space:nowrap">''变量列表'' = [[#expression-list|''表达式列表'']]</code>
<code>''变量列表'' = [[#expression-list|''表达式列表'']]</code>


''var-list''是由逗号分隔的变量;''表达式列表''是由逗号分隔的一组一个或多个表达式。所有的表达式都会在赋值之前被求值,所以<code style="white-space:nowrap">a, b = b, a</code>会交换<var>a</var>与<var>b</var>的值。
''var-list''是由逗号分隔的变量;''表达式列表''是由逗号分隔的一组一个或多个表达式。所有的表达式都会在赋值之前被求值,所以<code>a, b = b, a</code>会交换<var>a</var>与<var>b</var>的值。


==== 局部变量定义 ====
==== 局部变量定义 ====
<code style="white-space:nowrap">local ''变量列表''</code>
<code>local ''变量列表''</code>


<code style="white-space:nowrap">local ''变量列表'' = [[#expression-list|''表达式列表'']]</code>
<code>local ''变量列表'' = [[#expression-list|''表达式列表'']]</code>


局部变量可以在一个[[#block|语句块]]或[[#block|代码块]]内任意地方声明。第一种形式,不需要表达式列表,声明变量但不赋值,所以这些变量都会将nil作为值二中形式,为局部变量赋值,参见上面的[[#Assignments|赋值]]。
局部变量可以在一个[[#block|语句块]]或[[#block|代码块]]内任意地方声明。第一种形式,不需要表达式列表,声明变量但不赋值,所以这些变量都会将nil作为值二中形式,为局部变量赋值,参见上面的[[#Assignments|赋值]]。


注意:局部变量显式声明于local关键字后面,形式为''local 变量名''。比如语句 <code style="white-space:nowrap">local x = x</code> 声明一个名为“x”的局部变量,并将全局变量“x”的值赋予这个变量。局部变量只在其声明的语句块结尾前的地方生效。
注意:局部变量显式声明于local关键字后面,形式为''local 变量名''。比如语句 <code>local x = x</code> 声明一个名为“x”的局部变量,并将全局变量“x”的值赋予这个变量。局部变量只在其声明的语句块结尾前的地方生效。


==== 控制结构 ====
==== 控制结构 ====
{{Anchor|while}}
{{Anchor|while}}
<code style="white-space:nowrap">while ''表达式'' do ''[[#block|语句块]]'' end</code>
<code>while ''表达式'' do ''[[#block|语句块]]'' end</code>


只要''表达式''还是(视为)true时,就会反复执行while语句。
只要''表达式''还是(视为)true时,就会反复执行while语句。


{{Anchor|repeat}}
{{Anchor|repeat}}
<code style="white-space:nowrap">repeat ''[[#block|语句块]]'' until ''表达式''</code>
<code>repeat ''[[#block|语句块]]'' until ''表达式''</code>


反复执行''语句块'',直到''表达式''(视为)是true。语句块内声明的局部变量可以用于表达式中。
反复执行''语句块'',直到''表达式''(视为)是true。语句块内声明的局部变量可以用于表达式中。


{{Anchor|for}}
{{Anchor|for}}
<code style="white-space:nowrap">for ''名称'' = ''表达式1'', ''表达式2'', ''表达式3'' do ''[[#block|语句块]]'' end</code><br/>
<code>for ''名称'' = ''表达式1'', ''表达式2'', ''表达式3'' do ''[[#block|语句块]]'' end</code><br/>
<code style="white-space:nowrap">for ''名称'' = ''表达式1'', ''表达式2'' do ''[[#block|语句块]]'' end</code>
<code>for ''名称'' = ''表达式1'', ''表达式2'' do ''[[#block|语句块]]'' end</code>


for循环的第一种形式会声明一个局部变量,然后从''exp1''以''exp3''的步长到''exp2''重复语句块。注意''exp3''可以省略,相当于1,但是非数字值比如<code>nil</code>和<code>false</code>是错误的。循环开始前,所有的表达式都会先被计算。
for循环的第一种形式会声明一个局部变量,然后从''exp1''以''exp3''的步长到''exp2''重复语句块。注意''exp3''可以省略,相当于1,但是非数字值比如<code>nil</code>和<code>false</code>是错误的。循环开始前,所有的表达式都会先被计算。
第639行: 第639行:


{{Anchor|iterators}}
{{Anchor|iterators}}
<code style="white-space:nowrap">for ''变量列表'' in [[#expression-list|''表达式列表'']] do ''[[#block|语句块]]'' end</code>
<code>for ''变量列表'' in [[#expression-list|''表达式列表'']] do ''[[#block|语句块]]'' end</code>


第二种形式的for循环会与'''迭代'''函数一起作用。就像在第一种形式里,''表达式列表''会在开始循环之前就赋值了。
第二种形式的for循环会与'''迭代'''函数一起作用。就像在第一种形式里,''表达式列表''会在开始循环之前就赋值了。
第663行: 第663行:


{{Anchor|if}}
{{Anchor|if}}
<code style="white-space:nowrap">if ''表达式1'' then ''[[#block|语句块1]]'' elseif ''表达式2'' then ''[[#block|语句块2]]'' else ''[[#block|语句块3]]'' end</code>
<code>if ''表达式1'' then ''[[#block|语句块1]]'' elseif ''表达式2'' then ''[[#block|语句块2]]'' else ''[[#block|语句块3]]'' end</code>


当''表达式1''返回true时执行''语句块1'',否则,当''表达式2''返回true时执行''语句块2'',否则执行''语句块3''。<code style="white-space:nowrap">else ''语句块3''</code>部分可以省去,<code style="white-space:nowrap">elseif ''表达式2'' then ''语句块2''</code>部分可以重复,也可以省去。
当''表达式1''返回true时执行''语句块1'',否则,当''表达式2''返回true时执行''语句块2'',否则执行''语句块3''。<code>else ''语句块3''</code>部分可以省去,<code>elseif ''表达式2'' then ''语句块2''</code>部分可以重复,也可以省去。


{{Anchor|return}}
{{Anchor|return}}
<code style="white-space:nowrap">return [[#expression-list|''表达式列表'']]</code>
<code>return [[#expression-list|''表达式列表'']]</code>


返回语句用来返回从函数或者[[#chunk|代码块]](只是一个函数)。''表达式列表''是由逗号分隔开的零个或更多个表达式。
返回语句用来返回从函数或者[[#chunk|代码块]](只是一个函数)。''表达式列表''是由逗号分隔开的零个或更多个表达式。
第674行: 第674行:
Lua实现[[尾调用|尾调用(tail calls)]]。如果表达式列表包含一个函数调用,对那个函数的调用会重新使用当前的堆栈项(stack frame)。这可用于处理调用堆栈的函数,比如<code>[[#getfenv|getfenv()]]</code>和<code>[[#debug.traceback|debug.traceback()]]</code>。
Lua实现[[尾调用|尾调用(tail calls)]]。如果表达式列表包含一个函数调用,对那个函数的调用会重新使用当前的堆栈项(stack frame)。这可用于处理调用堆栈的函数,比如<code>[[#getfenv|getfenv()]]</code>和<code>[[#debug.traceback|debug.traceback()]]</code>。


返回语句必须是[[#block|语句块]]的最后一个语句。如果某些原因语句块的中间需要返回,那么可能需要明显的语句块<code style="white-space:nowrap">do return end</code>。
返回语句必须是[[#block|语句块]]的最后一个语句。如果某些原因语句块的中间需要返回,那么可能需要明显的语句块<code>do return end</code>。


{{Anchor|break}}
{{Anchor|break}}
第681行: 第681行:
break语句用来中止一个while、repeat或for循环的执行,并跳到循环后面的语句。
break语句用来中止一个while、repeat或for循环的执行,并跳到循环后面的语句。


break声明必须是[[#block|语句块(block)]]的最后一个声明。如果某些原因语句块的中间需要中断,那么可能需要明显的语句块<code style="white-space:nowrap">do return end</code>。
break声明必须是[[#block|语句块(block)]]的最后一个声明。如果某些原因语句块的中间需要中断,那么可能需要明显的语句块<code>do return end</code>。


==== 函数调用作为语句 ====
==== 函数调用作为语句 ====
第766行: 第766行:


==== assert ====
==== assert ====
<code style="white-space:nowrap">assert( v, message, ... )</code>
<code>assert( v, message, ... )</code>


如果<code>v</code>是nil或false,抛出错误,<code>message</code>就会用作错误的文本:如果错误文本为nil(或者未指定),则文本是"assertion failed!"(“断言失败!”);如果是字符串或者数字,文字就是那个值;否则assert本身就会抛出错误。
如果<code>v</code>是nil或false,抛出错误,<code>message</code>就会用作错误的文本:如果错误文本为nil(或者未指定),则文本是"assertion failed!"(“断言失败!”);如果是字符串或者数字,文字就是那个值;否则assert本身就会抛出错误。
第783行: 第783行:


==== error ====
==== error ====
<code style="white-space:nowrap">error( message, level )</code>
<code>error( message, level )</code>


用文本<code>message</code>来发出一个错误。
用文本<code>message</code>来发出一个错误。
第790行: 第790行:


==== getfenv ====
==== getfenv ====
<code style="white-space:nowrap">getfenv( f )</code>
<code>getfenv( f )</code>


注意,这个函数可能会无效,取决于配置中的<code>allowEnvFuncs</code>。
注意,这个函数可能会无效,取决于配置中的<code>allowEnvFuncs</code>。
第803行: 第803行:


==== getmetatable ====
==== getmetatable ====
<code style="white-space:nowrap">getmetatable( table )</code>
<code>getmetatable( table )</code>


返回这个[[#table|表]]的[[#Metatables|元表]]。其他的类型都会返回nil。
返回这个[[#table|表]]的[[#Metatables|元表]]。其他的类型都会返回nil。
第810行: 第810行:


==== ipairs ====
==== ipairs ====
<code style="white-space:nowrap">ipairs( t )</code>
<code>ipairs( t )</code>


返回3个值:迭代函数、表<code>t</code>和0。它是供[[#iterators|<code>for</code>的迭代形式]]使用的:
返回3个值:迭代函数、表<code>t</code>和0。它是供[[#iterators|<code>for</code>的迭代形式]]使用的:
第822行: 第822行:
它会迭代数对(1, t[1])、(2,t[2])等,直到t[i]是nil时。
它会迭代数对(1, t[1])、(2,t[2])等,直到t[i]是nil时。


如果<code>__ipairs</code>[[#Metatables|元方法]]存在,那么标准行为会被覆盖,调用会返回与<code style="white-space:nowrap">__ipairs( t )</code>的返回值一致的值。
如果<code>__ipairs</code>[[#Metatables|元方法]]存在,那么标准行为会被覆盖,调用会返回与<code>__ipairs( t )</code>的返回值一致的值。


==== next ====
==== next ====
<code style="white-space:nowrap">next( table, key )</code>
<code>next( table, key )</code>


允许遍历表中的键。如果<code>key</code>是nil或者未指定,返回表中的第一个键和值,否则,返回下一个键和值。如果没有更多的键可以用,返回nil。可以通过使用<code style="white-space:nowrap">next( t ) == nil</code>来检查表是否是空的。
允许遍历表中的键。如果<code>key</code>是nil或者未指定,返回表中的第一个键和值,否则,返回下一个键和值。如果没有更多的键可以用,返回nil。可以通过使用<code>next( t ) == nil</code>来检查表是否是空的。


注意键被返回的顺序是没有指定的,即使表有数字的索引(indexes)。如要以数字顺序遍历表,使用[[#for|数字的for]]或[[#ipairs|ipairs]]。
注意键被返回的顺序是没有指定的,即使表有数字的索引(indexes)。如要以数字顺序遍历表,使用[[#for|数字的for]]或[[#ipairs|ipairs]]。
第834行: 第834行:


==== pairs ====
==== pairs ====
<code style="white-space:nowrap">pairs( t )</code>
<code>pairs( t )</code>


返回三个值:迭代器函数([[#next|next]]或者类似的)、表<code>t</code>和nil。这是用于[[#iterators|<code>for</code>的迭代器形式]]。
返回三个值:迭代器函数([[#next|next]]或者类似的)、表<code>t</code>和nil。这是用于[[#iterators|<code>for</code>的迭代器形式]]。
第846行: 第846行:
这会遍历<code>t</code>中的键值对,就像[[#next|next]]做的那样。参考[[#next|next]]的文档以了解遍历期间修改表的限制。
这会遍历<code>t</code>中的键值对,就像[[#next|next]]做的那样。参考[[#next|next]]的文档以了解遍历期间修改表的限制。


如果__pairs[[#Metatables|元方法]]存在,那么标准行为会被覆盖,调用会返回与<code style="white-space:nowrap">__pairs( t )</code>的返回值一致的值。
如果__pairs[[#Metatables|元方法]]存在,那么标准行为会被覆盖,调用会返回与<code>__pairs( t )</code>的返回值一致的值。


==== pcall ====
==== pcall ====
<code style="white-space:nowrap">pcall( f, ... )</code>
<code>pcall( f, ... )</code>


用指定的参数在“保护模式”下调用函数<code>f</code>。这意味着如果在调用<code>f</code>时出错,pcall会返回false与错误消息。如果没有错误发生,pcall会返回true与调用返回的所有值。
用指定的参数在“保护模式”下调用函数<code>f</code>。这意味着如果在调用<code>f</code>时出错,pcall会返回false与错误消息。如果没有错误发生,pcall会返回true与调用返回的所有值。
第866行: 第866行:


==== rawequal ====
==== rawequal ====
<code style="white-space:nowrap">rawequal( a, b )</code>
<code>rawequal( a, b )</code>


与<code style="white-space:nowrap">a == b</code>相同,只是忽略了所有__eq[[#Metatables|元方法]]。
与<code>a == b</code>相同,只是忽略了所有__eq[[#Metatables|元方法]]。


==== rawget ====
==== rawget ====
<code style="white-space:nowrap">rawget( table, k )</code>
<code>rawget( table, k )</code>


与<code>table[k]</code>相同,只是忽略了所有__index[[#Metatables|元方法]]。
与<code>table[k]</code>相同,只是忽略了所有__index[[#Metatables|元方法]]。


==== rawset ====
==== rawset ====
<code style="white-space:nowrap">rawset( table, k, v )</code>
<code>rawset( table, k, v )</code>


与<code style="white-space:nowrap">table[k] = v</code>相同,只是忽略了所有__newindex[[#Metatables|元方法]]。
与<code>table[k] = v</code>相同,只是忽略了所有__newindex[[#Metatables|元方法]]。


==== select ====
==== select ====
<code style="white-space:nowrap">select( index, ... )</code>
<code>select( index, ... )</code>


如果<code>index</code>是数字,返回index之后的<code>...</code>中对应位置的数。如果<code>index</code>是字符串"#",返回<code>...</code>中参数的个数。
如果<code>index</code>是数字,返回index之后的<code>...</code>中对应位置的数。如果<code>index</code>是字符串"#",返回<code>...</code>中参数的个数。
第899行: 第899行:


==== setmetatable ====
==== setmetatable ====
<code style="white-space:nowrap">setmetatable( table, metatable )</code>
<code>setmetatable( table, metatable )</code>


设置[[#table|表]]的[[#Metatables|元表]],<code>metatable</code>可能是nil,但是必须是清楚地提供的。
设置[[#table|表]]的[[#Metatables|元表]],<code>metatable</code>可能是nil,但是必须是清楚地提供的。
第906行: 第906行:


==== tonumber ====
==== tonumber ====
<code style="white-space:nowrap">tonumber( value, base )</code>
<code>tonumber( value, base )</code>


尝试将<code>value</code>转化为数字。如果已经是数字或者可以转化为数字的字符串,<code>tonumber</code>就会返回这个数字,否则会返回nil。
尝试将<code>value</code>转化为数字。如果已经是数字或者可以转化为数字的字符串,<code>tonumber</code>就会返回这个数字,否则会返回nil。
第915行: 第915行:


==== tostring ====
==== tostring ====
<code style="white-space:nowrap">tostring( value )</code>
<code>tostring( value )</code>


将<code>value</code>转化为字符串。参考上方的[[#Data types|数据类型]]以了解各种类型被转换时的细节。
将<code>value</code>转化为字符串。参考上方的[[#Data types|数据类型]]以了解各种类型被转换时的细节。


对于表,标准的转换行为可以被__tostring[[#mw.language:formatDate|元方法]]覆盖。如果这个元方法存在,那么调用tostring会返回由<code style="white-space:nowrap">__tostring( value )</code>返回的单个值。
对于表,标准的转换行为可以被__tostring[[#mw.language:formatDate|元方法]]覆盖。如果这个元方法存在,那么调用tostring会返回由<code>__tostring( value )</code>返回的单个值。


==== type ====
==== type ====
<code style="white-space:nowrap">type( value )</code>
<code>type( value )</code>


以字符串形式返回<code>value</code>的类型<code>"[[#nil|nil]]"</code>、<code>"[[#number|number]]"</code>、<code>"[[#string|string]]"</code>、<code>"[[#boolean|boolean]]"</code>、<code>"[[#table|table]]"</code>或<code>"[[#function|function]]"</code>。
以字符串形式返回<code>value</code>的类型<code>"[[#nil|nil]]"</code>、<code>"[[#number|number]]"</code>、<code>"[[#string|string]]"</code>、<code>"[[#boolean|boolean]]"</code>、<code>"[[#table|table]]"</code>或<code>"[[#function|function]]"</code>。


==== unpack ====
==== unpack ====
<code style="white-space:nowrap">unpack( table, i, j )</code>
<code>unpack( table, i, j )</code>


从给定的表返回值,像<code style="white-space:nowrap">table[i], table[i+1], ···, table[j]</code>这样的如果被写出会直接返回。<code>i</code>和<code>j</code>如果没有给出或者是nil,取其默认值1和<code style="white-space:nowrap">[[#Length operator|#]]table</code>。
从给定的表返回值,像<code>table[i], table[i+1], ···, table[j]</code>这样的如果被写出会直接返回。<code>i</code>和<code>j</code>如果没有给出或者是nil,取其默认值1和<code>[[#Length operator|#]]table</code>。


注意如果<code>table</code>不是一个[[#sequence|序列]]且<code>j</code>是nil或未指定,则结果是不确定的,参考[[#Length operator|长度操作符]]以了解详细。
注意如果<code>table</code>不是一个[[#sequence|序列]]且<code>j</code>是nil或未指定,则结果是不确定的,参考[[#Length operator|长度操作符]]以了解详细。


==== xpcall ====
==== xpcall ====
<code style="white-space:nowrap">xpcall( f, errhandler )</code>
<code>xpcall( f, errhandler )</code>


这个很像<code>[[#pcall|pcall]]</code>,只是错误消息在返回之前传递到函数<code>errhandler</code>中。
这个很像<code>[[#pcall|pcall]]</code>,只是错误消息在返回之前传递到函数<code>errhandler</code>中。
第953行: 第953行:


==== debug.traceback ====
==== debug.traceback ====
<code style="white-space:nowrap">debug.traceback( message, level )</code>
<code>debug.traceback( message, level )</code>


以字符串的形式返回调用栈。可选的message参数会被连接到调用栈信息的前面。可选的level参数表示返回多少层调用栈。
以字符串的形式返回调用栈。可选的message参数会被连接到调用栈信息的前面。可选的level参数表示返回多少层调用栈。
第960行: 第960行:


==== math.abs ====
==== math.abs ====
<code style="white-space:nowrap">math.abs( x )</code>
<code>math.abs( x )</code>


返回<code>x</code>的绝对值。
返回<code>x</code>的绝对值。


==== math.acos ====
==== math.acos ====
<code style="white-space:nowrap">math.acos( x )</code>
<code>math.acos( x )</code>


返回<code>x</code>的反余弦值(以弧度表示)。
返回<code>x</code>的反余弦值(以弧度表示)。


==== math.asin ====
==== math.asin ====
<code style="white-space:nowrap">math.asin( x )</code>
<code>math.asin( x )</code>


返回<code>x</code>的反正弦值(以弧度表示)。
返回<code>x</code>的反正弦值(以弧度表示)。


==== math.atan ====
==== math.atan ====
<code style="white-space:nowrap">math.atan( x )</code>
<code>math.atan( x )</code>


返回<code>x</code>的反正切值(以弧度表示)。
返回<code>x</code>的反正切值(以弧度表示)。


==== math.atan2 ====
==== math.atan2 ====
<code style="white-space:nowrap">math.atan2( y, x )</code>
<code>math.atan2( y, x )</code>


使用两个参数的符号(signs)以找到结果的象限,返回<code>y/x</code>的反正切值(弧度制)。
使用两个参数的符号(signs)以找到结果的象限,返回<code>y/x</code>的反正切值(弧度制)。


==== math.ceil ====
==== math.ceil ====
<code style="white-space:nowrap">math.ceil( x )</code>
<code>math.ceil( x )</code>


返回不小于<code>x</code>的最小整数。
返回不小于<code>x</code>的最小整数。


==== math.cos ====
==== math.cos ====
<code style="white-space:nowrap">math.cos( x )</code>
<code>math.cos( x )</code>


返回<code>x</code>(以弧度表示)的余弦值。
返回<code>x</code>(以弧度表示)的余弦值。


==== math.cosh ====
==== math.cosh ====
<code style="white-space:nowrap">math.cosh( x )</code>
<code>math.cosh( x )</code>


返回<code>x</code>的双曲余弦值。
返回<code>x</code>的双曲余弦值。


==== math.deg ====
==== math.deg ====
<code style="white-space:nowrap">math.deg( x )</code>
<code>math.deg( x )</code>


将弧度角<code>x</code>转化为角度。
将弧度角<code>x</code>转化为角度。


==== math.exp ====
==== math.exp ====
<code style="white-space:nowrap">math.exp( x )</code>
<code>math.exp( x )</code>


返回<math>e^x</math>。
返回<math>e^x</math>。


==== math.floor ====
==== math.floor ====
<code style="white-space:nowrap">math.floor( x )</code>
<code>math.floor( x )</code>


返回小于或等于<code>x</code>的最大整数。
返回小于或等于<code>x</code>的最大整数。


==== math.fmod ====
==== math.fmod ====
<code style="white-space:nowrap">math.fmod( x, y )</code>
<code>math.fmod( x, y )</code>


返回<code>x</code>除以<code>y</code>的余数,并将商舍入到零。比如,<code>math.fmod( 10, 3 )</code>产生<code>1</code>。
返回<code>x</code>除以<code>y</code>的余数,并将商舍入到零。比如,<code>math.fmod( 10, 3 )</code>产生<code>1</code>。


==== math.frexp ====
==== math.frexp ====
<code style="white-space:nowrap">math.frexp( x )</code>
<code>math.frexp( x )</code>


返回像这样的两个值<code>m</code>和<code>e</code>:
返回像这样的两个值<code>m</code>和<code>e</code>:
第1,031行: 第1,031行:


==== math.ldexp ====
==== math.ldexp ====
<code style="white-space:nowrap">math.ldexp( m, e )</code>
<code>math.ldexp( m, e )</code>


返回<math>m \times 2^e</math>(<code>e</code>是整数)。
返回<math>m \times 2^e</math>(<code>e</code>是整数)。


==== math.log ====
==== math.log ====
<code style="white-space:nowrap">math.log( x )</code>
<code>math.log( x )</code>


返回<code>x</code>的自然对数。
返回<code>x</code>的自然对数。


==== math.log10 ====
==== math.log10 ====
<code style="white-space:nowrap">math.log10( x )</code>
<code>math.log10( x )</code>


返回<code>x</code>的以10为底的对数。
返回<code>x</code>的以10为底的对数。


==== math.max ====
==== math.max ====
<code style="white-space:nowrap">math.max( x, ... )</code>
<code>math.max( x, ... )</code>


返回其参数的最大值。
返回其参数的最大值。
第1,053行: 第1,053行:


==== math.min ====
==== math.min ====
<code style="white-space:nowrap">math.min( x, ... )</code>
<code>math.min( x, ... )</code>


返回其参数的最小值。
返回其参数的最小值。
第1,060行: 第1,060行:


==== math.modf ====
==== math.modf ====
<code style="white-space:nowrap">math.modf( x )</code>
<code>math.modf( x )</code>


返回两个数字,<code>x</code>的整数部分和<code>x</code>的小数部分。比如,<code>math.modf( 1.25 )</code>产生<code>1, 0.25</code>。
返回两个数字,<code>x</code>的整数部分和<code>x</code>的小数部分。比如,<code>math.modf( 1.25 )</code>产生<code>1, 0.25</code>。
第1,068行: 第1,068行:


==== math.pow ====
==== math.pow ====
<code style="white-space:nowrap">math.pow( x, y )</code>
<code>math.pow( x, y )</code>


与<code>x^y</code>相同。
与<code>x^y</code>相同。


==== math.rad ====
==== math.rad ====
<code style="white-space:nowrap">math.rad( x )</code>
<code>math.rad( x )</code>


将角度<code>x</code>转化为弧度角。
将角度<code>x</code>转化为弧度角。


==== math.random ====
==== math.random ====
<code style="white-space:nowrap">math.random( m, n )</code>
<code>math.random( m, n )</code>


返回伪随机数。
返回伪随机数。
第1,092行: 第1,092行:


==== math.randomseed ====
==== math.randomseed ====
<code style="white-space:nowrap">math.randomseed( x )</code>
<code>math.randomseed( x )</code>


以<code>x</code>作为伪随机数生成器的[[伪随机数的种子|种子]]。
以<code>x</code>作为伪随机数生成器的[[伪随机数的种子|种子]]。
第1,099行: 第1,099行:


==== math.sin ====
==== math.sin ====
<code style="white-space:nowrap">math.sin( x )</code>
<code>math.sin( x )</code>


返回 <code>x</code>(以弧度表示)的正弦值。
返回 <code>x</code>(以弧度表示)的正弦值。


==== math.sinh ====
==== math.sinh ====
<code style="white-space:nowrap">math.sinh( x )</code>
<code>math.sinh( x )</code>


返回<code>x</code>的双曲正弦值。
返回<code>x</code>的双曲正弦值。


==== math.sqrt ====
==== math.sqrt ====
<code style="white-space:nowrap">math.sqrt( x )</code>
<code>math.sqrt( x )</code>


返回<code>x</code>的平方根。与<code>x^0.5</code>相同。
返回<code>x</code>的平方根。与<code>x^0.5</code>相同。


==== math.tan ====
==== math.tan ====
<code style="white-space:nowrap">math.tan( x )</code>
<code>math.tan( x )</code>


返回<code>x</code>(以弧度表示)的正切值。
返回<code>x</code>(以弧度表示)的正切值。


==== math.tanh ====
==== math.tanh ====
<code style="white-space:nowrap">math.tanh( x )</code>
<code>math.tanh( x )</code>


返回<code>x</code>的双曲正切值。
返回<code>x</code>的双曲正切值。
第1,131行: 第1,131行:


==== os.date ====
==== os.date ====
<code style="white-space:nowrap">os.date( format, time )</code>
<code>os.date( format, time )</code>


: ''[[#mw.language:formatDate|语言库的formatDate]]''可以被用于更加全面的日期格式。
: ''[[#mw.language:formatDate|语言库的formatDate]]''可以被用于更加全面的日期格式。
第1,154行: 第1,154行:


==== os.difftime ====
==== os.difftime ====
<code style="white-space:nowrap">os.difftime( t2, t1 )</code>
<code>os.difftime( t2, t1 )</code>


返回从<code>t1</code>到<code>t2</code>两个时间的秒数。
返回从<code>t1</code>到<code>t2</code>两个时间的秒数。


==== os.time ====
==== os.time ====
<code style="white-space:nowrap">os.time( table )</code>
<code>os.time( table )</code>


返回代表当前时间的数字。
返回代表当前时间的数字。
第1,168行: 第1,168行:


==== require ====
==== require ====
<code style="white-space:nowrap">require( modulename )</code>
<code>require( modulename )</code>


加载指定的模块。
加载指定的模块。
第1,211行: 第1,211行:


==== package.seeall ====
==== package.seeall ====
<code style="white-space:nowrap">package.seeall( table )</code>
<code>package.seeall( table )</code>


将<code>table</code>的__index[[#Metatables|元方法]]设置为[[#_G|_G]]。
将<code>table</code>的__index[[#Metatables|元方法]]设置为[[#_G|_G]]。
第1,222行: 第1,222行:


==== string.byte ====
==== string.byte ====
<code style="white-space:nowrap">string.byte( s, i, j )</code>
<code>string.byte( s, i, j )</code>


如果字符串被考虑为字节的数组,返回<code>s[i]</code>、<code>s[i+1]</code>、···、<code>s[j]</code>的字节值。<code>i</code>的默认值为1;<code>j</code>的默认值为<code>i</code>。等价于[[#mw.ustring.byte|mw.ustring.byte()]]。
如果字符串被考虑为字节的数组,返回<code>s[i]</code>、<code>s[i+1]</code>、···、<code>s[j]</code>的字节值。<code>i</code>的默认值为1;<code>j</code>的默认值为<code>i</code>。等价于[[#mw.ustring.byte|mw.ustring.byte()]]。


==== string.char ====
==== string.char ====
<code style="white-space:nowrap">string.char( ... )</code>
<code>string.char( ... )</code>


接受零个或更多个整数。返回和长度与参数个数相同的字符串,每个字符的字节值等于其对应的参数。
接受零个或更多个整数。返回和长度与参数个数相同的字符串,每个字符的字节值等于其对应的参数。
第1,238行: 第1,238行:


==== string.find ====
==== string.find ====
<code style="white-space:nowrap">string.find( s, pattern, init, plain )</code>
<code>string.find( s, pattern, init, plain )</code>


寻找字符串<code>s</code>中<code>[[#Patterns|pattern]]</code>的第一个匹配(match)。如果找到一个匹配,返回<code>s</code>中起止点的序列,否则返回nil。如果匹配模式有捕获物(capture),则在成功的匹配中被捕获的值也会被返回在两个索引之后。
寻找字符串<code>s</code>中<code>[[#Patterns|pattern]]</code>的第一个匹配(match)。如果找到一个匹配,返回<code>s</code>中起止点的序列,否则返回nil。如果匹配模式有捕获物(capture),则在成功的匹配中被捕获的值也会被返回在两个索引之后。
第1,249行: 第1,249行:


==== string.format ====
==== string.format ====
<code style="white-space:nowrap">string.format( formatstring, ... )</code>
<code>string.format( formatstring, ... )</code>


返回变量数字的参数将第一个参数(必须是字符串)格式化后的版本。
返回变量数字的参数将第一个参数(必须是字符串)格式化后的版本。
第1,269行: 第1,269行:


==== string.gmatch ====
==== string.gmatch ====
<code style="white-space:nowrap">string.gmatch( s, pattern )</code>
<code>string.gmatch( s, pattern )</code>


返回一个迭代器函数,每次被调用,都会从字符串<code>s</code>中的[[#Patterns|<code>pattern</code>]]返回下一个捕获。如果<code>pattern</code>不会指定捕获,则整个匹配都会在每次调用时产生。
返回一个迭代器函数,每次被调用,都会从字符串<code>s</code>中的[[#Patterns|<code>pattern</code>]]返回下一个捕获。如果<code>pattern</code>不会指定捕获,则整个匹配都会在每次调用时产生。
第1,278行: 第1,278行:


==== string.gsub ====
==== string.gsub ====
<code style="white-space:nowrap">string.gsub( s, pattern, repl, n )</code>
<code>string.gsub( s, pattern, repl, n )</code>


将字符串<code>s</code>的所有(或者前<code>n</code>个,如果给定了)出现的[[#Patterns|<code>pattern</code>]]替换为由<code>repl</code>指定的替换物(replacement),这个替换物可以是字符串、表或者函数。<code>gsub</code>也会作为第二个值返回发生了的匹配的总次数。
将字符串<code>s</code>的所有(或者前<code>n</code>个,如果给定了)出现的[[#Patterns|<code>pattern</code>]]替换为由<code>repl</code>指定的替换物(replacement),这个替换物可以是字符串、表或者函数。<code>gsub</code>也会作为第二个值返回发生了的匹配的总次数。
第1,293行: 第1,293行:


==== string.len ====
==== string.len ====
<code style="white-space:nowrap">string.len( s )</code>
<code>string.len( s )</code>


返回字符串的字节长度。不会被ASCII NUL字符混淆。等同于[[#Length operator|#]]s。
返回字符串的字节长度。不会被ASCII NUL字符混淆。等同于[[#Length operator|#]]s。
第1,300行: 第1,300行:


==== string.lower ====
==== string.lower ====
<code style="white-space:nowrap">string.lower( s )</code>
<code>string.lower( s )</code>


将字符串的所有ASCII大写字符转为小写后返回。所有其他字符不改变。
将字符串的所有ASCII大写字符转为小写后返回。所有其他字符不改变。
第1,307行: 第1,307行:


==== string.match ====
==== string.match ====
<code style="white-space:nowrap">string.match( s, pattern, init )</code>
<code>string.match( s, pattern, init )</code>


寻找字符串中[[#Patterns|<code>pattern</code>]]的第一个匹配,如果找到一个,则<code>match</code>返回从样式匹配中的捕获,否则返回nil。如果<code>pattern</code>不指定捕获,则返回整个字符串。
寻找字符串中[[#Patterns|<code>pattern</code>]]的第一个匹配,如果找到一个,则<code>match</code>返回从样式匹配中的捕获,否则返回nil。如果<code>pattern</code>不指定捕获,则返回整个字符串。
第1,316行: 第1,316行:


==== string.rep ====
==== string.rep ====
<code style="white-space:nowrap">string.rep( s, n )</code>
<code>string.rep( s, n )</code>


返回字符串<code>s</code>重复<code>n</code>次并连接后的字符串。等价于[[#mw.ustring.rep|mw.ustring.rep()]]。
返回字符串<code>s</code>重复<code>n</code>次并连接后的字符串。等价于[[#mw.ustring.rep|mw.ustring.rep()]]。


==== string.reverse ====
==== string.reverse ====
<code style="white-space:nowrap">string.reverse( s )</code>
<code>string.reverse( s )</code>


返回字符串<code>s</code>被逆转后的字符串(按字节逆转)。
返回字符串<code>s</code>被逆转后的字符串(按字节逆转)。


==== string.sub ====
==== string.sub ====
<code style="white-space:nowrap">string.sub( s, i, j )</code>
<code>string.sub( s, i, j )</code>


返回<code>s</code>的从<code>i</code>开始持续到<code>j</code>的子串(substring);<code>i</code>和<code>j</code>可以是负的。如果<code>j</code>是nil或未指定,则会一直到字符串末尾。
返回<code>s</code>的从<code>i</code>开始持续到<code>j</code>的子串(substring);<code>i</code>和<code>j</code>可以是负的。如果<code>j</code>是nil或未指定,则会一直到字符串末尾。


特别地,调用<code>string.sub(s,1,j)</code>会返回字符串<code>s</code>的长度<code>j</code>的前缀,而<code style="white-space:nowrap">string.sub(s, -i)</code>会返回字符串<code>s</code>的长度为<code>i</code>的后缀。
特别地,调用<code>string.sub(s,1,j)</code>会返回字符串<code>s</code>的长度<code>j</code>的前缀,而<code>string.sub(s, -i)</code>会返回字符串<code>s</code>的长度为<code>i</code>的后缀。


参看[[#mw.ustring.sub|mw.ustring.sub()]]以了解使用字符而非字节值的类似函数。
参看[[#mw.ustring.sub|mw.ustring.sub()]]以了解使用字符而非字节值的类似函数。


==== string.upper ====
==== string.upper ====
<code style="white-space:nowrap">string.upper( s )</code>
<code>string.upper( s )</code>


将字符串的所有ASCII小写字符转为大写后返回。所有其他字符不改变。
将字符串的所有ASCII小写字符转为大写后返回。所有其他字符不改变。
第1,438行: 第1,438行:
! scope="row" | <code>[{{var|set}}]</code>
! scope="row" | <code>[{{var|set}}]</code>
|
|
代表集合{{var|set}}中所有字符的组合。一系列字符可以通过用'<code>-</code>'分隔字符末尾来指定。上面讲到的所有的<code>%{{var|x}}</code>都可以是{{var|set}}中的一部分。{{var|set}}中所有其他字符代表其自身。 例如,<code>[%w_]</code>(或<code>[_%w]</code>)代表所有的字母数字字符加上下划线,<code style="white-space:nowrap">[0-7]</code>代表八进制数,<code style="white-space:nowrap">[0-7%l%-]</code>代表八进制数字加上小写字母加上字符'<code>-</code>'。
代表集合{{var|set}}中所有字符的组合。一系列字符可以通过用'<code>-</code>'分隔字符末尾来指定。上面讲到的所有的<code>%{{var|x}}</code>都可以是{{var|set}}中的一部分。{{var|set}}中所有其他字符代表其自身。 例如,<code>[%w_]</code>(或<code>[_%w]</code>)代表所有的字母数字字符加上下划线,<code>[0-7]</code>代表八进制数,<code>[0-7%l%-]</code>代表八进制数字加上小写字母加上字符'<code>-</code>'。


范围和类之间的交互是没被定义的,因此像<code>[%a-z]</code>或<code>[a-%%]</code>这样的匹配模式没有含义。
范围和类之间的交互是没被定义的,因此像<code>[%a-z]</code>或<code>[a-%%]</code>这样的匹配模式没有含义。
第1,480行: 第1,480行:


==== table.concat ====
==== table.concat ====
<code style="white-space:nowrap">table.concat( table, sep, i, j )</code>
<code>table.concat( table, sep, i, j )</code>


给一个所有元素都是字符串或数字的数组,返回<code style="white-space:nowrap">table[i] .. sep .. table[i+1] ··· sep .. table[j]</code>。
给一个所有元素都是字符串或数字的数组,返回<code>table[i] .. sep .. table[i+1] ··· sep .. table[j]</code>。


<code>sep</code>的默认值为空字符串,<code>i</code>的默认值为1,<code>j</code>的默认值为表的长度。如果<code>i</code>大于<code>j</code>,返回空字符串。
<code>sep</code>的默认值为空字符串,<code>i</code>的默认值为1,<code>j</code>的默认值为表的长度。如果<code>i</code>大于<code>j</code>,返回空字符串。


==== table.insert ====
==== table.insert ====
<code style="white-space:nowrap">table.insert( table, value )</code>
<code>table.insert( table, value )</code>
<br/>
<br/>
<code style="white-space:nowrap">table.insert( table, pos, value )</code>
<code>table.insert( table, pos, value )</code>


在表<code>table</code>的位置<code>pos</code>处插入元素<code>value</code>,会将其他元素的位置增加1以给这个元素提供插入空间。<code>pos</code>的默认值为表的长度加1,所以调用<code style="white-space:nowrap">table.insert(t, x)</code>会在表<code>t</code>的末尾插入<code>x</code>。
在表<code>table</code>的位置<code>pos</code>处插入元素<code>value</code>,会将其他元素的位置增加1以给这个元素提供插入空间。<code>pos</code>的默认值为表的长度加1,所以调用<code>table.insert(t, x)</code>会在表<code>t</code>的末尾插入<code>x</code>。


大于<code>#table</code>的元素都会被提高,参考[[#Length operator|长度操作符]]以了解当表不是[[#sequence|序列]]时的注意事项。
大于<code>#table</code>的元素都会被提高,参考[[#Length operator|长度操作符]]以了解当表不是[[#sequence|序列]]时的注意事项。


==== table.maxn ====
==== table.maxn ====
<code style="white-space:nowrap">table.maxn( table )</code>
<code>table.maxn( table )</code>


返回给定的表的最大正数索引,或者表没有正数索引时返回零。
返回给定的表的最大正数索引,或者表没有正数索引时返回零。
第1,516行: 第1,516行:


==== table.remove ====
==== table.remove ====
<code style="white-space:nowrap">table.remove( table, pos )</code>
<code>table.remove( table, pos )</code>


从表格<code>table</code>中移走位于<code>pos</code>处的元素,将后面的元素前移。<code>pos</code>的默认值为表的长度,所以调用<code style="white-space:nowrap">table.remove( t )</code>会移除表<code>t</code>的最后一个元素。
从表格<code>table</code>中移走位于<code>pos</code>处的元素,将后面的元素前移。<code>pos</code>的默认值为表的长度,所以调用<code>table.remove( t )</code>会移除表<code>t</code>的最后一个元素。


大于<code>#table</code>的元素都会被移动,参考[[#Length operator|长度操作符]]以了解当表不是[[#sequence|序列]]时的注意事项。
大于<code>#table</code>的元素都会被移动,参考[[#Length operator|长度操作符]]以了解当表不是[[#sequence|序列]]时的注意事项。


==== table.sort ====
==== table.sort ====
<code style="white-space:nowrap">table.sort( table, comp )</code>
<code>table.sort( table, comp )</code>


从<code>table[1]</code>到<code>table[#table]</code>,按照给定的次序给表的元素排序。如果给了<code>comp</code>,则它必须是接收两个表元素的函数,并且当第一个小于第二个时返回true(所以<code style="white-space:nowrap">not comp(a[i+1],a[i])</code>会在排序后为true)。如果没有给定<code>comp</code>,则使用标准的Lua操作符<code>%lt;</code>。
从<code>table[1]</code>到<code>table[#table]</code>,按照给定的次序给表的元素排序。如果给了<code>comp</code>,则它必须是接收两个表元素的函数,并且当第一个小于第二个时返回true(所以<code>not comp(a[i+1],a[i])</code>会在排序后为true)。如果没有给定<code>comp</code>,则使用标准的Lua操作符<code>%lt;</code>。


排序算法并不稳定;也就是说,当两个元素按照给定的顺序被看作相等时,它们在排序后的相对位置可能会改变。
排序算法并不稳定;也就是说,当两个元素按照给定的顺序被看作相等时,它们在排序后的相对位置可能会改变。
第1,536行: 第1,536行:


==== mw.addWarning ====
==== mw.addWarning ====
<code style="white-space:nowrap">mw.addWarning( text )</code>
<code>mw.addWarning( text )</code>


在预览编辑时加一个警告信息。<code>text</code>解析为维基文本。
在预览编辑时加一个警告信息。<code>text</code>解析为维基文本。


==== mw.allToString ====
==== mw.allToString ====
<code style="white-space:nowrap">mw.allToString( ... )</code>
<code>mw.allToString( ... )</code>


对所有的参数调用[[#tostring|tostring()]],然后用制表符作为分隔符连接起来。
对所有的参数调用[[#tostring|tostring()]],然后用制表符作为分隔符连接起来。


==== mw.clone ====
==== mw.clone ====
<code style="white-space:nowrap">mw.clone( value )</code>
<code>mw.clone( value )</code>


深拷贝一个值。所有的表和它们的元表被重构,但是新表和旧表共用函数。
深拷贝一个值。所有的表和它们的元表被重构,但是新表和旧表共用函数。
第1,566行: 第1,566行:


==== mw.loadData ====
==== mw.loadData ====
<code style="white-space:nowrap">mw.loadData( module )</code>
<code>mw.loadData( module )</code>


有时一个模块需要大量表格的数据,例如,用于转换计量单位的通用模块可能需要一张大表的已识别的单位及其转换系数。而且有时这些模块会在一个页面中使用多次。每次<code><nowiki>{{#invoke:}}</nowiki></code>都解析大表格的数据会用大量时间。<code>mw.loadData()</code>正是为了避免这个问题。
有时一个模块需要大量表格的数据,例如,用于转换计量单位的通用模块可能需要一张大表的已识别的单位及其转换系数。而且有时这些模块会在一个页面中使用多次。每次<code><nowiki>{{#invoke:}}</nowiki></code>都解析大表格的数据会用大量时间。<code>mw.loadData()</code>正是为了避免这个问题。
第1,578行: 第1,578行:
* 返回的表(和所有子表)不能有[[#Metatables|metatable]]元表。
* 返回的表(和所有子表)不能有[[#Metatables|metatable]]元表。
* 所有的表键必须是布尔值、数字、字符串。
* 所有的表键必须是布尔值、数字、字符串。
* 由<code>mw.loadData()</code>返回的表会元方法,可以提供只读获取由模块返回的表。因为不能直接包含数据,<code>[[#pairs|pairs()]]</code>和<code>[[#ipairs|ipairs()]]</code>会起作用,但是其他方法如<code>[[#Length operator|#值]]</code>、<code style="white-space:nowrap">[[#next|next()]]</code>和[[#Table library|表库]]的函数不会起作用。
* 由<code>mw.loadData()</code>返回的表会元方法,可以提供只读获取由模块返回的表。因为不能直接包含数据,<code>[[#pairs|pairs()]]</code>和<code>[[#ipairs|ipairs()]]</code>会起作用,但是其他方法如<code>[[#Length operator|#值]]</code>、<code>[[#next|next()]]</code>和[[#Table library|表库]]的函数不会起作用。


上述假定的单位转换模块可能将其代码存储在“Module:Convert”然后将其数据存储在“Module:Convert/data”,且“Module:Convert”会使用<code style="white-space:nowrap">local data = mw.loadData( 'Module:Convert/data' )</code>来有效地加载数据。
上述假定的单位转换模块可能将其代码存储在“Module:Convert”然后将其数据存储在“Module:Convert/data”,且“Module:Convert”会使用<code>local data = mw.loadData( 'Module:Convert/data' )</code>来有效地加载数据。


==== mw.dumpObject ====
==== mw.dumpObject ====
<code style="white-space:nowrap">mw.dumpObject( object )</code>
<code>mw.dumpObject( object )</code>


将<code>object</code>序列化为人类可读的字符串并返回。
将<code>object</code>序列化为人类可读的字符串并返回。
第1,589行: 第1,589行:
==== mw.log ====
==== mw.log ====
{{Anchor|print}}
{{Anchor|print}}
<code style="white-space:nowrap">mw.log( ... )</code>
<code>mw.log( ... )</code>


将参数传递到[[#mw.allToString|mw.allToString()]],然后将结果字符串加载控制台后。
将参数传递到[[#mw.allToString|mw.allToString()]],然后将结果字符串加载控制台后。
第1,596行: 第1,596行:


==== mw.logObject ====
==== mw.logObject ====
<code style="white-space:nowrap">mw.logObject( object )</code>
<code>mw.logObject( object )</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.logObject( object, prefix )</code>
<code>mw.logObject( object, prefix )</code>


调用[[#mw.dumpObject|mw.dumpObject()]]然后将结果加到控制台输出的后面。如果给了<code>prefix</code>,则会被加到控制台输出并紧随一个等于号在序列化字符串之前,比如输出的字符串可以是"prefix = object-string"。
调用[[#mw.dumpObject|mw.dumpObject()]]然后将结果加到控制台输出的后面。如果给了<code>prefix</code>,则会被加到控制台输出并紧随一个等于号在序列化字符串之前,比如输出的字符串可以是"prefix = object-string"。
第1,611行: 第1,611行:


<nowiki>{{#invoke:module|function|arg1|arg2|name=arg3}}</nowiki>
<nowiki>{{#invoke:module|function|arg1|arg2|name=arg3}}</nowiki>
那么<code>frame.args[1]</code>会返回<code>"arg1"</code>,<code>frame.args[2]</code>会返回<code>"arg2"</code>,<code>frame.args['name']</code>或<code>frame.args.name</code>会返回<code>"arg3"</code>。在参数列表迭代可以使用<code style="white-space:nowrap">pairs( frame.args )</code>或<code style="white-space:nowrap">ipairs( frame.args )</code>。
那么<code>frame.args[1]</code>会返回<code>"arg1"</code>,<code>frame.args[2]</code>会返回<code>"arg2"</code>,<code>frame.args['name']</code>或<code>frame.args.name</code>会返回<code>"arg3"</code>。在参数列表迭代可以使用<code>pairs( frame.args )</code>或<code>ipairs( frame.args )</code>。
然而由于Lua实现表迭代器,迭代的顺序不确定,参数出现在维基文本中的顺序也无从得知。
然而由于Lua实现表迭代器,迭代的顺序不确定,参数出现在维基文本中的顺序也无从得知。


第1,618行: 第1,618行:
在MediaWiki模板调用中,命名参数(named arguments)会在传递到Lua前移除名称和值的多余空格,而匿名参数(unnamed arguments)不会移除空格。
在MediaWiki模板调用中,命名参数(named arguments)会在传递到Lua前移除名称和值的多余空格,而匿名参数(unnamed arguments)不会移除空格。


考虑到性能,<code>frame.args</code>使用元表,而非直接包含参数。参数值会从根据需求从MediaWiki请求得到。这意味着大多数其他表格方法不会正常生效,包括<code>[[#Length operator|#frame.args]]</code>、<code style="white-space:nowrap">[[#next|next]]( frame.args )</code>和[[#Table library|表库]]中的函数。
考虑到性能,<code>frame.args</code>使用元表,而非直接包含参数。参数值会从根据需求从MediaWiki请求得到。这意味着大多数其他表格方法不会正常生效,包括<code>[[#Length operator|#frame.args]]</code>、<code>[[#next|next]]( frame.args )</code>和[[#Table library|表库]]中的函数。


如果在#invoke的参数中包含了像模板调用和三层括号变量这样的预处理器(preprocessor)语法,那么这些在传递到Lua之后不会被展开,直到值被Lua请求时才会展开。如果在#invoke的参数中包含了用XML标记形式写的特殊标签,例如<code>&lt;pre&gt;</code>、<code>&lt;nowiki&gt;</code>、<code>&lt;gallery&gt;</code>和<code>&lt;ref&gt;</code>,这些标签会被转化为[[strip marker]]——一种特殊字符串,由删除符(ASCII 127)开始,在从#invoke返回后转化为HTML。
如果在#invoke的参数中包含了像模板调用和三层括号变量这样的预处理器(preprocessor)语法,那么这些在传递到Lua之后不会被展开,直到值被Lua请求时才会展开。如果在#invoke的参数中包含了用XML标记形式写的特殊标签,例如<code>&lt;pre&gt;</code>、<code>&lt;nowiki&gt;</code>、<code>&lt;gallery&gt;</code>和<code>&lt;ref&gt;</code>,这些标签会被转化为[[strip marker]]——一种特殊字符串,由删除符(ASCII 127)开始,在从#invoke返回后转化为HTML。


==== frame:callParserFunction ====
==== frame:callParserFunction ====
<code style="white-space:nowrap">frame:callParserFunction( name, args )</code>
<code>frame:callParserFunction( name, args )</code>
<br/>
<br/>
<code style="white-space:nowrap">frame:callParserFunction( name, ... )</code>
<code>frame:callParserFunction( name, ... )</code>
<br/>
<br/>
<code style="white-space:nowrap">frame:callParserFunction{ name = string, args = table }</code>
<code>frame:callParserFunction{ name = string, args = table }</code>


: ''注意使用了[[#named arguments|命名参数]]。''
: ''注意使用了[[#named arguments|命名参数]]。''
第1,654行: 第1,654行:


==== frame:expandTemplate ====
==== frame:expandTemplate ====
<code style="white-space:nowrap">frame:expandTemplate{ title = title, args = table }</code>
<code>frame:expandTemplate{ title = title, args = table }</code>


: ''注意使用了[[#named arguments|命名参数]]。''
: ''注意使用了[[#named arguments|命名参数]]。''
第1,675行: 第1,675行:


==== frame:extensionTag ====
==== frame:extensionTag ====
<code style="white-space:nowrap">frame:extensionTag( name, content, args )</code>
<code>frame:extensionTag( name, content, args )</code>
<br/>
<br/>
<code style="white-space:nowrap">frame:extensionTag{ name = string, content = string, args = table_or_string }</code>
<code>frame:extensionTag{ name = string, content = string, args = table_or_string }</code>


这大致相当于调用[[#frame:callParserFunction|frame:callParserFunction()]],其函数名称为<code style="white-space:nowrap">'#tag:' .. name</code>而<code>content</code>加到参数<code>args</code>中。
这大致相当于调用[[#frame:callParserFunction|frame:callParserFunction()]],其函数名称为<code>'#tag:' .. name</code>而<code>content</code>加到参数<code>args</code>中。


<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
第1,710行: 第1,710行:


==== frame:newChild ====
==== frame:newChild ====
<code style="white-space:nowrap">frame:newChild{ title = title, args = table }</code>
<code>frame:newChild{ title = title, args = table }</code>


: ''注意使用了[[#named arguments|命名参数]]。''
: ''注意使用了[[#named arguments|命名参数]]。''
第1,719行: 第1,719行:


==== frame:preprocess ====
==== frame:preprocess ====
<code style="white-space:nowrap">frame:preprocess( string )</code>
<code>frame:preprocess( string )</code>
<br/>
<br/>
<code style="white-space:nowrap">frame:preprocess{ text = string }</code>
<code>frame:preprocess{ text = string }</code>


在当前框架环境下展开维基文本,比如,模板、解析器函数以及像<code><nowiki>{{{1}}}</nowiki></code>这样的参数都会展开。某些特殊的写成XML格式的标记,比如<code>&lt;pre&gt;</code>、<code>&lt;nowiki&gt;</code>、<code>&lt;gallery&gt;</code>和<code>&lt;ref&gt;</code>都会被替换为“strip marker”——一类特殊的字符串,由删除符(ASCII 127)开头,在从<code>#invoke</code>返回后被替换成HTML。
在当前框架环境下展开维基文本,比如,模板、解析器函数以及像<code><nowiki>{{{1}}}</nowiki></code>这样的参数都会展开。某些特殊的写成XML格式的标记,比如<code>&lt;pre&gt;</code>、<code>&lt;nowiki&gt;</code>、<code>&lt;gallery&gt;</code>和<code>&lt;ref&gt;</code>都会被替换为“strip marker”——一类特殊的字符串,由删除符(ASCII 127)开头,在从<code>#invoke</code>返回后被替换成HTML。
第1,730行: 第1,730行:


==== frame:getArgument ====
==== frame:getArgument ====
<code style="white-space:nowrap">frame:getArgument( arg )</code>
<code>frame:getArgument( arg )</code>
<br/>
<br/>
<code style="white-space:nowrap">frame:getArgument{ name = arg }</code>
<code>frame:getArgument{ name = arg }</code>


获得特定参数的对象,或者没有提供参数时返回nil。
获得特定参数的对象,或者没有提供参数时返回nil。
第1,739行: 第1,739行:


==== frame:newParserValue ====
==== frame:newParserValue ====
<code style="white-space:nowrap">frame:newParserValue( text )</code>
<code>frame:newParserValue( text )</code>
<br/>
<br/>
<code style="white-space:nowrap">frame:newParserValue{ text = text }</code>
<code>frame:newParserValue{ text = text }</code>


返回有一个方法<code>object:expand()</code>的对象,该方法可以返回<code style="white-space:nowrap">[[#frame:preprocess|frame:preprocess]]( text )</code>的结果。
返回有一个方法<code>object:expand()</code>的对象,该方法可以返回<code>[[#frame:preprocess|frame:preprocess]]( text )</code>的结果。


==== frame:newTemplateParserValue ====
==== frame:newTemplateParserValue ====
<code style="white-space:nowrap">frame:newTemplateParserValue{ title = title, args = table }</code>
<code>frame:newTemplateParserValue{ title = title, args = table }</code>


: ''注意使用了[[#named arguments|命名参数]]。''
: ''注意使用了[[#named arguments|命名参数]]。''
第1,755行: 第1,755行:
<code>frame:argumentPairs()</code>
<code>frame:argumentPairs()</code>


等同于<code style="white-space:nowrap">pairs( frame.args )</code>。考虑到向后兼容。
等同于<code>pairs( frame.args )</code>。考虑到向后兼容。


=== 哈希库 ===
=== 哈希库 ===


==== mw.hash.hashValue ====
==== mw.hash.hashValue ====
<code style="white-space:nowrap">mw.hash.hashValue( algo, value )</code>
<code>mw.hash.hashValue( algo, value )</code>


按照指定的算法算出字符串的哈希值。可以通过[[#mw.hash.listAlgorithms|mw.hash.listAlgorithms()]]获得有效的算法。
按照指定的算法算出字符串的哈希值。可以通过[[#mw.hash.listAlgorithms|mw.hash.listAlgorithms()]]获得有效的算法。


==== mw.hash.listAlgorithms ====
==== mw.hash.listAlgorithms ====
<code style="white-space:nowrap">mw.hash.listAlgorithms()</code>
<code>mw.hash.listAlgorithms()</code>


返回支持的哈希算法的列表,以用于[[#mw.hash.hashValue|mw.hash.hashValue()]]。
返回支持的哈希算法的列表,以用于[[#mw.hash.hashValue|mw.hash.hashValue()]]。
第1,790行: 第1,790行:


==== mw.html.create ====
==== mw.html.create ====
<code style="white-space:nowrap">mw.html.create( tagName, args )</code>
<code>mw.html.create( tagName, args )</code>


创建一个新的mw.html对象,其包含一个标签名称为<code>tagName</code>的HTML元素。你也可以传递一个空的字符串或nil作为<code>tagName</code>,以创建一个新的空的mw.html对象。
创建一个新的mw.html对象,其包含一个标签名称为<code>tagName</code>的HTML元素。你也可以传递一个空的字符串或nil作为<code>tagName</code>,以创建一个新的空的mw.html对象。
第1,800行: 第1,800行:


==== mw.html:node ====
==== mw.html:node ====
<code style="white-space:nowrap">[[#mw.html-object|html]]:node( builder )</code>
<code>[[#mw.html-object|html]]:node( builder )</code>


向当前的mw.html实例附加mw.html(<code>builder</code>)子节点。如果传递nil,那么函数不做任何事。(<code>builder</code>)节点是要创建的HTML元素的种类的字符串代表。
向当前的mw.html实例附加mw.html(<code>builder</code>)子节点。如果传递nil,那么函数不做任何事。(<code>builder</code>)节点是要创建的HTML元素的种类的字符串代表。


==== mw.html:wikitext ====
==== mw.html:wikitext ====
<code style="white-space:nowrap">[[#mw.html-object|html]]:wikitext( ... )</code>
<code>[[#mw.html-object|html]]:wikitext( ... )</code>


给mw.html对象加上不定数量的维基文本字符串。
给mw.html对象加上不定数量的维基文本字符串。
第1,812行: 第1,812行:


==== mw.html:newline ====
==== mw.html:newline ====
<code style="white-space:nowrap">[[#mw.html-object|html]]:newline()</code>
<code>[[#mw.html-object|html]]:newline()</code>


给mw.html对象加新行。
给mw.html对象加新行。


==== mw.html:tag ====
==== mw.html:tag ====
<code style="white-space:nowrap">[[#mw.html-object|html]]:tag( tagName, args )</code>
<code>[[#mw.html-object|html]]:tag( tagName, args )</code>


给mw.html对象添加一个新的节点,其标签名称为<code>tagName</code>,返回代表这个新的节点的mw.html实例。<code>args</code>参数和[[#mw.html.create|<code>mw.html.create</code>]]的参数是一样的。
给mw.html对象添加一个新的节点,其标签名称为<code>tagName</code>,返回代表这个新的节点的mw.html实例。<code>args</code>参数和[[#mw.html.create|<code>mw.html.create</code>]]的参数是一样的。


==== mw.html:attr ====
==== mw.html:attr ====
<code style="white-space:nowrap">[[#mw.html-object|html]]:attr( name, value )</code>
<code>[[#mw.html-object|html]]:attr( name, value )</code>
<br/>
<br/>
<code style="white-space:nowrap">[[#mw.html-object|html]]:attr( table )</code>
<code>[[#mw.html-object|html]]:attr( table )</code>


将节点的HTML属性的<code>name</code>属性的值设为<code>value</code>。也可以选择使用表,其键值对即为属性名称-值对。第一种形式中,如果值为nil,会导致这个给定名称的已被设置属性设为未被设置。
将节点的HTML属性的<code>name</code>属性的值设为<code>value</code>。也可以选择使用表,其键值对即为属性名称-值对。第一种形式中,如果值为nil,会导致这个给定名称的已被设置属性设为未被设置。


==== mw.html:getAttr ====
==== mw.html:getAttr ====
<code style="white-space:nowrap">[[#mw.html-object|html]]:getAttr( name )</code>
<code>[[#mw.html-object|html]]:getAttr( name )</code>


获得已经通过[[#mw.html:attr|<code>html:attr()</code>]]设置的属性<code>name</code>的值。
获得已经通过[[#mw.html:attr|<code>html:attr()</code>]]设置的属性<code>name</code>的值。


==== mw.html:addClass ====
==== mw.html:addClass ====
<code style="white-space:nowrap">[[#mw.html-object|html]]:addClass( class )</code>
<code>[[#mw.html-object|html]]:addClass( class )</code>


给节点的类(class)属性添加一个类名称(class name)。如果参数为nil,则无效。
给节点的类(class)属性添加一个类名称(class name)。如果参数为nil,则无效。


==== mw.html:css ====
==== mw.html:css ====
<code style="white-space:nowrap">[[#mw.html-object|html]]:css( name, value )</code>
<code>[[#mw.html-object|html]]:css( name, value )</code>
<br/>
<br/>
<code style="white-space:nowrap">[[#mw.html-object|html]]:css( table )</code>
<code>[[#mw.html-object|html]]:css( table )</code>


使用给定的<code>name</code>和<code>value</code>给节点设置CSS属性。也可以选择使用表,其键值对即为CSS名称-值对。第一种形式中,如果值为nil,会导致这个给定名称的已被设置的CSS设为未被设置。
使用给定的<code>name</code>和<code>value</code>给节点设置CSS属性。也可以选择使用表,其键值对即为CSS名称-值对。第一种形式中,如果值为nil,会导致这个给定名称的已被设置的CSS设为未被设置。


==== mw.html:cssText ====
==== mw.html:cssText ====
<code style="white-space:nowrap">[[#mw.html-object|html]]:cssText( css )</code>
<code>[[#mw.html-object|html]]:cssText( css )</code>


给节点的属性添加一些纯<code>css</code>文本。如果参数为nil,则无效。
给节点的属性添加一些纯<code>css</code>文本。如果参数为nil,则无效。


==== mw.html:done ====
==== mw.html:done ====
<code style="white-space:nowrap">[[#mw.html-object|html]]:done()</code>
<code>[[#mw.html-object|html]]:done()</code>


返回当前节点被创建时所在的上级节点。类似于jQuery.end,这是个方便地函数可以允许创建多个子节点,而由一个语句串在一起。
返回当前节点被创建时所在的上级节点。类似于jQuery.end,这是个方便地函数可以允许创建多个子节点,而由一个语句串在一起。


==== mw.html:allDone ====
==== mw.html:allDone ====
<code style="white-space:nowrap">[[#mw.html-object|html]]:allDone()</code>
<code>[[#mw.html-object|html]]:allDone()</code>


类似于[[#mw.html:done|<code>html:done()</code>]],但是会遍历直到树节点的根部再返回。
类似于[[#mw.html:done|<code>html:done()</code>]],但是会遍历直到树节点的根部再返回。
第1,868行: 第1,868行:


==== mw.language.fetchLanguageName ====
==== mw.language.fetchLanguageName ====
<code style="white-space:nowrap">mw.language.fetchLanguageName( code, inLanguage )</code>
<code>mw.language.fetchLanguageName( code, inLanguage )</code>


给定的语言代码的完整语言名称:默认为本地名称,如有<code>inLanguage</code>的值,则是被翻译为目标语言的语言名称。
给定的语言代码的完整语言名称:默认为本地名称,如有<code>inLanguage</code>的值,则是被翻译为目标语言的语言名称。


==== mw.language.fetchLanguageNames ====
==== mw.language.fetchLanguageNames ====
<code style="white-space:nowrap">mw.language.fetchLanguageNames()</code>
<code>mw.language.fetchLanguageNames()</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.language.fetchLanguageNames( inLanguage )</code>
<code>mw.language.fetchLanguageNames( inLanguage )</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.language.fetchLanguageNames( inLanguage, include )</code>
<code>mw.language.fetchLanguageNames( inLanguage, include )</code>


获取MediaWiki已知的语言列表,返回将语言代码映射到语言名称的表。
获取MediaWiki已知的语言列表,返回将语言代码映射到语言名称的表。
第1,894行: 第1,894行:
==== mw.language.getFallbacksFor ====
==== mw.language.getFallbacksFor ====
[[File:MediaWiki fallback chains.svg|thumb|备选链]]
[[File:MediaWiki fallback chains.svg|thumb|备选链]]
<code style="white-space:nowrap">mw.language.getFallbacksFor( code )</code>
<code>mw.language.getFallbacksFor( code )</code>


返回MediaWiki针对指定语言代码的备选语言代码列表。
返回MediaWiki针对指定语言代码的备选语言代码列表。


==== mw.language.isKnownLanguageTag ====
==== mw.language.isKnownLanguageTag ====
<code style="white-space:nowrap">mw.language.isKnownLanguageTag( code )</code>
<code>mw.language.isKnownLanguageTag( code )</code>


若语言代码为MediaWiki已知的语言,返回true。
若语言代码为MediaWiki已知的语言,返回true。
第1,906行: 第1,906行:


==== mw.language.isSupportedLanguage ====
==== mw.language.isSupportedLanguage ====
<code style="white-space:nowrap">mw.language.isSupportedLanguage( code )</code>
<code>mw.language.isSupportedLanguage( code )</code>


检查MediaWiki的语言代码内是否有任何本地化可用。
检查MediaWiki的语言代码内是否有任何本地化可用。
第1,915行: 第1,915行:


==== mw.language.isValidBuiltInCode ====
==== mw.language.isValidBuiltInCode ====
<code style="white-space:nowrap">mw.language.isValidBuiltInCode( code )</code>
<code>mw.language.isValidBuiltInCode( code )</code>


如果语言代码是用于MediaWiki内部自定义的有效形式,返回true。
如果语言代码是用于MediaWiki内部自定义的有效形式,返回true。
第1,926行: 第1,926行:


==== mw.language.isValidCode ====
==== mw.language.isValidCode ====
<code style="white-space:nowrap">mw.language.isValidCode( code )</code>
<code>mw.language.isValidCode( code )</code>


若语言代码字符串是有效形式的,返回true,无论其是否存在。这包括了所有单独用于通过MediaWiki命名空间自定义使用的语言代码。
若语言代码字符串是有效形式的,返回true,无论其是否存在。这包括了所有单独用于通过MediaWiki命名空间自定义使用的语言代码。
第1,935行: 第1,935行:


==== mw.language.new ====
==== mw.language.new ====
<code style="white-space:nowrap">mw.language.new( code )</code>
<code>mw.language.new( code )</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.getLanguage( code )</code>
<code>mw.getLanguage( code )</code>


创建新的语言对象。语言对象没有任何可公开获取的属性,不过可以含有几个方法,下面列出。
创建新的语言对象。语言对象没有任何可公开获取的属性,不过可以含有几个方法,下面列出。
第1,944行: 第1,944行:


==== mw.language:getCode ====
==== mw.language:getCode ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:getCode()</code>
<code>[[#mw.language-object|lang]]:getCode()</code>


返回这个语言对象的语言代码。
返回这个语言对象的语言代码。


==== mw.language:getFallbackLanguages ====
==== mw.language:getFallbackLanguages ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:getFallbackLanguages()</code>
<code>[[#mw.language-object|lang]]:getFallbackLanguages()</code>


返回MediaWiki针对此语言对象的备选语言代码列表。等同<code style="white-space:nowrap">mw.language.getFallbacksFor( lang:getCode() )</code>。
返回MediaWiki针对此语言对象的备选语言代码列表。等同<code>mw.language.getFallbacksFor( lang:getCode() )</code>。


==== mw.language:isRTL ====
==== mw.language:isRTL ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:isRTL()</code>
<code>[[#mw.language-object|lang]]:isRTL()</code>


若语言是从右至左写的,返回true,否则返回false。
若语言是从右至左写的,返回true,否则返回false。


==== mw.language:lc ====
==== mw.language:lc ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:lc( s )</code>
<code>[[#mw.language-object|lang]]:lc( s )</code>


将字符串转化为小写,但遵从给定的语言的任何特殊规则。
将字符串转化为小写,但遵从给定的语言的任何特殊规则。


当加载了[[#Ustring library|ustring库]],[[#mw.ustring.lower|mw.ustring.lower()]]函数就会通过调用<code style="white-space:nowrap">mw.language.getContentLanguage():lc( s )</code>来实现。
当加载了[[#Ustring library|ustring库]],[[#mw.ustring.lower|mw.ustring.lower()]]函数就会通过调用<code>mw.language.getContentLanguage():lc( s )</code>来实现。


==== mw.language:lcfirst ====
==== mw.language:lcfirst ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:lcfirst( s )</code>
<code>[[#mw.language-object|lang]]:lcfirst( s )</code>


将字符串的第一个字符转化为小写,就像[[#mw.language:lc|lang:lc()]]那样。
将字符串的第一个字符转化为小写,就像[[#mw.language:lc|lang:lc()]]那样。


==== mw.language:uc ====
==== mw.language:uc ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:uc( s )</code>
<code>[[#mw.language-object|lang]]:uc( s )</code>


将字符串转化为大写,但遵从给定的语言的任何特殊规则。
将字符串转化为大写,但遵从给定的语言的任何特殊规则。


当加载了[[#Ustring library|ustring库]],[[#mw.ustring.upper|mw.ustring.upper()]]函数就会通过调用<code style="white-space:nowrap">mw.language.getContentLanguage():lc( s )</code>来实现。
当加载了[[#Ustring library|ustring库]],[[#mw.ustring.upper|mw.ustring.upper()]]函数就会通过调用<code>mw.language.getContentLanguage():lc( s )</code>来实现。


==== mw.language:ucfirst ====
==== mw.language:ucfirst ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:ucfirst( s )</code>
<code>[[#mw.language-object|lang]]:ucfirst( s )</code>


将字符串的第一个字符转化为大写,就像[[#mw.language:uc|lang:lc()]]那样。
将字符串的第一个字符转化为大写,就像[[#mw.language:uc|lang:lc()]]那样。


==== mw.language:caseFold ====
==== mw.language:caseFold ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:caseFold( s )</code>
<code>[[#mw.language-object|lang]]:caseFold( s )</code>


将字符串转换为不区分大小写的比较表示形式。注意,显示其结果可能无任何意义。
将字符串转换为不区分大小写的比较表示形式。注意,显示其结果可能无任何意义。


==== mw.language:formatNum ====
==== mw.language:formatNum ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:formatNum( n )</code>
<code>[[#mw.language-object|lang]]:formatNum( n )</code>
<br/>
<br/>
<code style="white-space:nowrap">[[#mw.language-object|lang]]:formatNum( n, options )</code>
<code>[[#mw.language-object|lang]]:formatNum( n, options )</code>


格式化数字,使用给定语言的合适的分组符合小数点。给予123456.78,可能会产生123,456.78、123.456,78或甚至١٢٣٬٤٥٦٫٧٨,取决于语言和wiki配置。
格式化数字,使用给定语言的合适的分组符合小数点。给予123456.78,可能会产生123,456.78、123.456,78或甚至١٢٣٬٤٥٦٫٧٨,取决于语言和wiki配置。
第1,999行: 第1,999行:


==== mw.language:formatDate ====
==== mw.language:formatDate ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:formatDate( format, timestamp, local )</code>
<code>[[#mw.language-object|lang]]:formatDate( format, timestamp, local )</code>


根据给定的格式字符串格式化一个日期。如果省略了<code>timestamp</code>,默认为当前时间。<code>local</code>的值必须是boolean或nil,如果是true,时间会格式化为wiki的当地时间而非UTC。
根据给定的格式字符串格式化一个日期。如果省略了<code>timestamp</code>,默认为当前时间。<code>local</code>的值必须是boolean或nil,如果是true,时间会格式化为wiki的当地时间而非UTC。
第2,018行: 第2,018行:


==== mw.language:formatDuration ====
==== mw.language:formatDuration ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:formatDuration( seconds )</code>
<code>[[#mw.language-object|lang]]:formatDuration( seconds )</code>
<br/>
<br/>
<code style="white-space:nowrap">[[#mw.language-object|lang]]:formatDuration( seconds, chosenIntervals )</code>
<code>[[#mw.language-object|lang]]:formatDuration( seconds, chosenIntervals )</code>


将秒数的时间间隔转化为更加已读的单位,例如12345转化为3 hours, 25 minutes and 45 seconds(3时25分45秒),作为字符串返回结果。
将秒数的时间间隔转化为更加已读的单位,例如12345转化为3 hours, 25 minutes and 45 seconds(3时25分45秒),作为字符串返回结果。
第2,027行: 第2,027行:


==== mw.language:parseFormattedNumber ====
==== mw.language:parseFormattedNumber ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:parseFormattedNumber( s )</code>
<code>[[#mw.language-object|lang]]:parseFormattedNumber( s )</code>


这需要一个以[[#mw.language:formatNum|lang:formatNum()]]格式化的数字,并返回实际数字。换句话说,这基本上是[[#tonumber|<code>tonumber()</code>]]根据语言转换的版本。
这需要一个以[[#mw.language:formatNum|lang:formatNum()]]格式化的数字,并返回实际数字。换句话说,这基本上是[[#tonumber|<code>tonumber()</code>]]根据语言转换的版本。
第2,033行: 第2,033行:
==== mw.language:convertPlural ====
==== mw.language:convertPlural ====
{{Anchor|mw.language:plural}}
{{Anchor|mw.language:plural}}
<code style="white-space:nowrap">[[#mw.language-object|lang]]:convertPlural( n, ... )</code>
<code>[[#mw.language-object|lang]]:convertPlural( n, ... )</code>
<br/>
<br/>
<code style="white-space:nowrap">[[#mw.language-object|lang]]:convertPlural( n, forms )</code>
<code>[[#mw.language-object|lang]]:convertPlural( n, forms )</code>
<br/>
<br/>
<code style="white-space:nowrap">[[#mw.language-object|lang]]:plural( n, ... )</code>
<code>[[#mw.language-object|lang]]:plural( n, ... )</code>
<br/>
<br/>
<code style="white-space:nowrap">[[#mw.language-object|lang]]:plural( n, forms )</code>
<code>[[#mw.language-object|lang]]:plural( n, forms )</code>


从<code>forms</code>(必须是[[#sequence|序列]]表)或<code>...</code>基于数字<code>n</code>选择合适的语法形式。例如,在英语你必须使用<code style="white-space:nowrap">n .. ' ' .. lang:plural( n, 'sock', 'socks' )</code>或<code style="white-space:nowrap">n .. ' ' .. lang:plural( n, { 'sock', 'socks' } )</code>来生成语法正确的文本:只有1 sock或200 socks。
从<code>forms</code>(必须是[[#sequence|序列]]表)或<code>...</code>基于数字<code>n</code>选择合适的语法形式。例如,在英语你必须使用<code>n .. ' ' .. lang:plural( n, 'sock', 'socks' )</code>或<code>n .. ' ' .. lang:plural( n, { 'sock', 'socks' } )</code>来生成语法正确的文本:只有1 sock或200 socks。


序列的必填值取决于语言,详见[[mw:Help:Magic words#Localization|魔术字的本地化]]和[[translatewiki:Special:MyLanguage/FAQ#PLURAL|translatewiki针对PLURAL的常见问题]]。
序列的必填值取决于语言,详见[[mw:Help:Magic words#Localization|魔术字的本地化]]和[[translatewiki:Special:MyLanguage/FAQ#PLURAL|translatewiki针对PLURAL的常见问题]]。
第2,047行: 第2,047行:
==== mw.language:convertGrammar ====
==== mw.language:convertGrammar ====
{{Anchor|mw.language:grammar}}
{{Anchor|mw.language:grammar}}
<code style="white-space:nowrap">[[#mw.language-object|lang]]:convertGrammar( word, case )</code>
<code>[[#mw.language-object|lang]]:convertGrammar( word, case )</code>
<br/>
<br/>
<code style="white-space:nowrap">[[#mw.language-object|lang]]:grammar( case, word )</code>
<code>[[#mw.language-object|lang]]:grammar( case, word )</code>


: ''注意两个别称之间的不同参数顺序。<code>convertGrammar</code>匹配MediaWiki的Language对象的相同名称的方法的顺序,而<code>grammar</code>匹配相同名称的解析器函数的顺序,可参考帮助:魔术字#本地化。''
: ''注意两个别称之间的不同参数顺序。<code>convertGrammar</code>匹配MediaWiki的Language对象的相同名称的方法的顺序,而<code>grammar</code>匹配相同名称的解析器函数的顺序,可参考帮助:魔术字#本地化。''
第2,058行: 第2,058行:


==== mw.language:gender ====
==== mw.language:gender ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:gender( what, masculine, feminine, neutral )</code>
<code>[[#mw.language-object|lang]]:gender( what, masculine, feminine, neutral )</code>
<br/>
<br/>
<code style="white-space:nowrap">[[#mw.language-object|lang]]:gender( what, { masculine, feminine, neutral } )</code>
<code>[[#mw.language-object|lang]]:gender( what, { masculine, feminine, neutral } )</code>


选择对应<code>what</code>的性别的字符串,可以是male、female或注册的用户名。
选择对应<code>what</code>的性别的字符串,可以是male、female或注册的用户名。


==== mw.language:getArrow ====
==== mw.language:getArrow ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:getArrow( direction )</code>
<code>[[#mw.language-object|lang]]:getArrow( direction )</code>


返回对应方向<code>direction</code>的Unicode箭头字符:
返回对应方向<code>direction</code>的Unicode箭头字符:
第2,077行: 第2,077行:


==== mw.language:getDir ====
==== mw.language:getDir ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:getDir()</code>
<code>[[#mw.language-object|lang]]:getDir()</code>


根据语言的书写方向,返回"ltr"(从左至右)或"rtl"(从右至左)。
根据语言的书写方向,返回"ltr"(从左至右)或"rtl"(从右至左)。


==== mw.language:getDirMark ====
==== mw.language:getDirMark ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:getDirMark( opposite )</code>
<code>[[#mw.language-object|lang]]:getDirMark( opposite )</code>


返回包含U+200E(从左至右标记)或U+20F(从右至左标记)的字符串,取决于语言的书写方向以及<code>opposite</code>的值。
返回包含U+200E(从左至右标记)或U+20F(从右至左标记)的字符串,取决于语言的书写方向以及<code>opposite</code>的值。


==== mw.language:getDirMarkEntity ====
==== mw.language:getDirMarkEntity ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:getDirMarkEntity( opposite )</code>
<code>[[#mw.language-object|lang]]:getDirMarkEntity( opposite )</code>


返回“&amp;lrm;”或“&amp;rlm;”,取决于语言的书写方向和<code>opposite</code>的值。
返回“&amp;lrm;”或“&amp;rlm;”,取决于语言的书写方向和<code>opposite</code>的值。


==== mw.language:getDurationIntervals ====
==== mw.language:getDurationIntervals ====
<code style="white-space:nowrap">[[#mw.language-object|lang]]:getDurationIntervals( seconds )</code>
<code>[[#mw.language-object|lang]]:getDurationIntervals( seconds )</code>
<br/>
<br/>
<code style="white-space:nowrap">[[#mw.language-object|lang]]:getDurationIntervals( seconds, chosenIntervals )</code>
<code>[[#mw.language-object|lang]]:getDurationIntervals( seconds, chosenIntervals )</code>


将秒数的时间间隔转化为更加已读的单位,例如12345转化为3 hours, 25 minutes and 45 seconds(3时25分45秒),返回从单位名称映射到数字的表。
将秒数的时间间隔转化为更加已读的单位,例如12345转化为3 hours, 25 minutes and 45 seconds(3时25分45秒),返回从单位名称映射到数字的表。
第2,110行: 第2,110行:


==== mw.message.new ====
==== mw.message.new ====
<code style="white-space:nowrap">mw.message.new( key, ... )</code>
<code>mw.message.new( key, ... )</code>


创建一个给定消息<code>key</code>的新消息对象。
创建一个给定消息<code>key</code>的新消息对象。
第2,118行: 第2,118行:


==== mw.message.newFallbackSequence ====
==== mw.message.newFallbackSequence ====
<code style="white-space:nowrap">mw.message.newFallbackSequence( ... )</code>
<code>mw.message.newFallbackSequence( ... )</code>


创建给定的消息的新的消息对象(存在的第一个会被使用)。
创建给定的消息的新的消息对象(存在的第一个会被使用)。
第2,125行: 第2,125行:


==== mw.message.newRawMessage ====
==== mw.message.newRawMessage ====
<code style="white-space:nowrap">mw.message.newRawMessage( msg, ... )</code>
<code>mw.message.newRawMessage( msg, ... )</code>


创建新的消息对象,使用给定的文本,而不是查找国际化的(internationalized)消息。剩下的参数会传递到新对象的<code>[[#mw.message:params|params()]]</code>方法中。
创建新的消息对象,使用给定的文本,而不是查找国际化的(internationalized)消息。剩下的参数会传递到新对象的<code>[[#mw.message:params|params()]]</code>方法中。
第2,132行: 第2,132行:


==== mw.message.rawParam ====
==== mw.message.rawParam ====
<code style="white-space:nowrap">mw.message.rawParam( value )</code>
<code>mw.message.rawParam( value )</code>


包装(wrap)该值使之不会被<code>[[#mw.message:parse|msg:parse()]]</code>解析为维基文本。
包装(wrap)该值使之不会被<code>[[#mw.message:parse|msg:parse()]]</code>解析为维基文本。


==== mw.message.numParam ====
==== mw.message.numParam ====
<code style="white-space:nowrap">mw.message.numParam( value )</code>
<code>mw.message.numParam( value )</code>


包装(wrap)该值使之自动被格式化为<code>[[#mw.language:formatNum|lang:formatNum()]]</code>。注意这不依赖事实上有效的[[#Language library|语言库]]。
包装(wrap)该值使之自动被格式化为<code>[[#mw.language:formatNum|lang:formatNum()]]</code>。注意这不依赖事实上有效的[[#Language library|语言库]]。


==== mw.message.getDefaultLanguage ====
==== mw.message.getDefaultLanguage ====
<code style="white-space:nowrap">mw.message.getDefaultLanguage()</code>
<code>mw.message.getDefaultLanguage()</code>


返回默认语言的语言对象。
返回默认语言的语言对象。


==== mw.message:params ====
==== mw.message:params ====
<code style="white-space:nowrap">[[#mw.message-object|msg]]:params( ... )</code>
<code>[[#mw.message-object|msg]]:params( ... )</code>
<br/>
<br/>
<code style="white-space:nowrap">[[#mw.message-object|msg]]:params( params )</code>
<code>[[#mw.message-object|msg]]:params( params )</code>


给消息添加参数,参数可以一被传递为独立的参数或者作为一个[[#sequence|序列]]表。参数必须是数字、字符串或由[[#mw.message.numParam|mw.message.numParam()]]或[[#mw.message.rawParam|mw.message.rawParam()]]返回的特殊的值。如果使用序列表,参数必须是直接出现在表中,使用[[#Metatables|__index元方法]]的参考不起作用。
给消息添加参数,参数可以一被传递为独立的参数或者作为一个[[#sequence|序列]]表。参数必须是数字、字符串或由[[#mw.message.numParam|mw.message.numParam()]]或[[#mw.message.rawParam|mw.message.rawParam()]]返回的特殊的值。如果使用序列表,参数必须是直接出现在表中,使用[[#Metatables|__index元方法]]的参考不起作用。
第2,156行: 第2,156行:


==== mw.message:rawParams ====
==== mw.message:rawParams ====
<code style="white-space:nowrap">[[#mw.message-object|msg]]:rawParams( ... )</code>
<code>[[#mw.message-object|msg]]:rawParams( ... )</code>
<br/>
<br/>
<code style="white-space:nowrap">[[#mw.message-object|msg]]:rawParams( params )</code>
<code>[[#mw.message-object|msg]]:rawParams( params )</code>


像[[#mw.message:params|:params()]],但是会先通过[[#mw.message.rawParam|mw.message.rawParam()]]传递所有的参数。
像[[#mw.message:params|:params()]],但是会先通过[[#mw.message.rawParam|mw.message.rawParam()]]传递所有的参数。
第2,165行: 第2,165行:


==== mw.message:numParams ====
==== mw.message:numParams ====
<code style="white-space:nowrap">[[#mw.message-object|msg]]:numParams( ... )</code>
<code>[[#mw.message-object|msg]]:numParams( ... )</code>
<br/>
<br/>
<code style="white-space:nowrap">[[#mw.message-object|msg]]:numParams( params )</code>
<code>[[#mw.message-object|msg]]:numParams( params )</code>


像[[#mw.message:params|:params()]],但是会先通过[[#mw.message.numParam|mw.message.numParam()]]传递所有的参数。
像[[#mw.message:params|:params()]],但是会先通过[[#mw.message.numParam|mw.message.numParam()]]传递所有的参数。
第2,174行: 第2,174行:


==== mw.message:inLanguage ====
==== mw.message:inLanguage ====
<code style="white-space:nowrap">[[#mw.message-object|msg]]:inLanguage( lang )</code>
<code>[[#mw.message-object|msg]]:inLanguage( lang )</code>


指定一个语言,以在加工消息时使用。<code>lang</code>可以是字符串,或者带有<code>getCode()</code>元表的表(比如[[#Language library|语言对象]])。
指定一个语言,以在加工消息时使用。<code>lang</code>可以是字符串,或者带有<code>getCode()</code>元表的表(比如[[#Language library|语言对象]])。
第2,183行: 第2,183行:


==== mw.message:useDatabase ====
==== mw.message:useDatabase ====
<code style="white-space:nowrap">[[#mw.message-object|msg]]:useDatabase( bool )</code>
<code>[[#mw.message-object|msg]]:useDatabase( bool )</code>


指定是否在MediaWiki:命名空间查找消息(比如在数据库中查找),或者只是使用MediaWiki分配的默认消息。
指定是否在MediaWiki:命名空间查找消息(比如在数据库中查找),或者只是使用MediaWiki分配的默认消息。
第2,192行: 第2,192行:


==== mw.message:plain ====
==== mw.message:plain ====
<code style="white-space:nowrap">[[#mw.message-object|msg]]:plain()</code>
<code>[[#mw.message-object|msg]]:plain()</code>


替换参数按原样返回消息维基文本。模板调用和解析器函数都是完整的。
替换参数按原样返回消息维基文本。模板调用和解析器函数都是完整的。


==== mw.message:exists ====
==== mw.message:exists ====
<code style="white-space:nowrap">[[#mw.message-object|msg]]:exists()</code>
<code>[[#mw.message-object|msg]]:exists()</code>


返回表示消息键是否存在的布尔值。
返回表示消息键是否存在的布尔值。


==== mw.message:isBlank ====
==== mw.message:isBlank ====
<code style="white-space:nowrap">[[#mw.message-object|msg]]:isBlank()</code>
<code>[[#mw.message-object|msg]]:isBlank()</code>


返回表示消息键是否有内容的布尔值。当消息键不存在或者消息是空字符串时返回true。
返回表示消息键是否有内容的布尔值。当消息键不存在或者消息是空字符串时返回true。


==== mw.message:isDisabled ====
==== mw.message:isDisabled ====
<code style="white-space:nowrap">[[#mw.message-object|msg]]:isDisabled()</code>
<code>[[#mw.message-object|msg]]:isDisabled()</code>


返回表示消息键是否被禁用的布尔值。如果消息键不存在,或者消息是空字符串,或者是字符串"-"则返回true。
返回表示消息键是否被禁用的布尔值。如果消息键不存在,或者消息是空字符串,或者是字符串"-"则返回true。
第2,274行: 第2,274行:


==== mw.site.stats.pagesInCategory ====
==== mw.site.stats.pagesInCategory ====
<code style="white-space:nowrap">mw.site.stats.pagesInCategory( category, which )</code>
<code>mw.site.stats.pagesInCategory( category, which )</code>


: {{red|这个函数是高开销函数}}
: {{red|这个函数是高开销函数}}
第2,290行: 第2,290行:


==== mw.site.stats.pagesInNamespace ====
==== mw.site.stats.pagesInNamespace ====
<code style="white-space:nowrap">mw.site.stats.pagesInNamespace( ns )</code>
<code>mw.site.stats.pagesInNamespace( ns )</code>


返回给定的命名空间(由数字指定)的页面数量。
返回给定的命名空间(由数字指定)的页面数量。


==== mw.site.stats.usersInGroup ====
==== mw.site.stats.usersInGroup ====
<code style="white-space:nowrap">mw.site.stats.usersInGroup( group )</code>
<code>mw.site.stats.usersInGroup( group )</code>


返回给定的用户组的用户数量。
返回给定的用户组的用户数量。


==== mw.site.interwikiMap ====
==== mw.site.interwikiMap ====
<code style="white-space:nowrap">mw.site.interwikiMap( filter )</code>
<code>mw.site.interwikiMap( filter )</code>


返回包含可用的跨wiki前缀的数据的表。如果<code>filter</code>是字符串"local",则只会返回关于本地跨wiki前缀的数据。如果<code>filter</code>是字符串"!local",则只会返回非本地跨wiki前缀的数据。如果没有指定filter,则所有的前缀的数据都会返回。这个"local"前缀是同一个项目的。比如在英文维基百科,其他语言的维基百科都会考虑为本地的(local),而维基词典不会。
返回包含可用的跨wiki前缀的数据的表。如果<code>filter</code>是字符串"local",则只会返回关于本地跨wiki前缀的数据。如果<code>filter</code>是字符串"!local",则只会返回非本地跨wiki前缀的数据。如果没有指定filter,则所有的前缀的数据都会返回。这个"local"前缀是同一个项目的。比如在英文维基百科,其他语言的维基百科都会考虑为本地的(local),而维基词典不会。
第2,321行: 第2,321行:


==== mw.text.decode ====
==== mw.text.decode ====
<code style="white-space:nowrap">mw.text.decode( s )</code>
<code>mw.text.decode( s )</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.text.decode( s, decodeNamedEntities )</code>
<code>mw.text.decode( s, decodeNamedEntities )</code>


将字符串中的[[HTML元素|HTML元素]]替换为对应的字符。
将字符串中的[[HTML元素|HTML元素]]替换为对应的字符。
第2,330行: 第2,330行:


==== mw.text.encode ====
==== mw.text.encode ====
<code style="white-space:nowrap">mw.text.encode( s )</code>
<code>mw.text.encode( s )</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.text.encode( s, charset )</code>
<code>mw.text.encode( s, charset )</code>


使用[[HTML实体|HTML实体]]替换字符串中的字符。字符“<”“>”“&”“"”和非换行空格会被适当的命名实体替换,所有其他的都会被替换为数字实体。
使用[[HTML实体|HTML实体]]替换字符串中的字符。字符“<”“>”“&”“"”和非换行空格会被适当的命名实体替换,所有其他的都会被替换为数字实体。
第2,339行: 第2,339行:


==== mw.text.jsonDecode ====
==== mw.text.jsonDecode ====
<code style="white-space:nowrap">mw.text.jsonDecode( s )</code>
<code>mw.text.jsonDecode( s )</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.text.jsonDecode( s, flags )</code>
<code>mw.text.jsonDecode( s, flags )</code>


解析JSON字符串。<code>flags</code>是0或flags<code>mw.text.JSON_PRESERVE_KEYS</code>和<code>mw.text.JSON_TRY_FIXING</code>的组合(使用<code>+</code>)。
解析JSON字符串。<code>flags</code>是0或flags<code>mw.text.JSON_PRESERVE_KEYS</code>和<code>mw.text.JSON_TRY_FIXING</code>的组合(使用<code>+</code>)。
第2,357行: 第2,357行:


==== mw.text.jsonEncode ====
==== mw.text.jsonEncode ====
<code style="white-space:nowrap">mw.text.jsonEncode( value )</code>
<code>mw.text.jsonEncode( value )</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.text.jsonEncode( value, flags )</code>
<code>mw.text.jsonEncode( value, flags )</code>


编码JSON字符串。如果传入的值不能被JSON编码则会报错。<code>flags</code>是0或flags<code>mw.text.JSON_PRESERVE_KEYS</code>和<code>mw.text.JSON_PRETTY</code>的组合(使用<code>+</code>)。
编码JSON字符串。如果传入的值不能被JSON编码则会报错。<code>flags</code>是0或flags<code>mw.text.JSON_PRESERVE_KEYS</code>和<code>mw.text.JSON_PRETTY</code>的组合(使用<code>+</code>)。
第2,374行: 第2,374行:


==== mw.text.killMarkers ====
==== mw.text.killMarkers ====
<code style="white-space:nowrap">mw.text.killMarkers( s )</code>
<code>mw.text.killMarkers( s )</code>


除去字符串中所有的[[strip marker]]。
除去字符串中所有的[[strip marker]]。


==== mw.text.listToText ====
==== mw.text.listToText ====
<code style="white-space:nowrap">mw.text.listToText( list )</code>
<code>mw.text.listToText( list )</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.text.listToText( list, separator, conjunction )</code>
<code>mw.text.listToText( list, separator, conjunction )</code>


使用自然语言组合一个列表,类似于<code>[[#table.concat|table.concat()]]</code>,但是最后一项前面的分隔符不同。
使用自然语言组合一个列表,类似于<code>[[#table.concat|table.concat()]]</code>,但是最后一项前面的分隔符不同。
第2,406行: 第2,406行:


==== mw.text.nowiki ====
==== mw.text.nowiki ====
<code style="white-space:nowrap">mw.text.nowiki( s )</code>
<code>mw.text.nowiki( s )</code>


使用[[HTML实体|HTML实体]]替换字符串中的多种字符,以避免被解析为维基文本。包括:
使用[[HTML实体|HTML实体]]替换字符串中的多种字符,以避免被解析为维基文本。包括:
第2,419行: 第2,419行:


==== mw.text.split ====
==== mw.text.split ====
<code style="white-space:nowrap">mw.text.split( s, pattern, plain )</code>
<code>mw.text.split( s, pattern, plain )</code>


在匹配了[[#Ustring patterns|Ustring模式]]的<code>pattern</code>的地方分割字符串。如果指定了<code>plain</code>且为true,则<code>pattern</code>会被解释为纯字符串而不是Lua模式(就像<code>[[#mw.ustring.find|mw.ustring.find()]]</code>的这个参数一样)。返回包含子字符串的表。
在匹配了[[#Ustring patterns|Ustring模式]]的<code>pattern</code>的地方分割字符串。如果指定了<code>plain</code>且为true,则<code>pattern</code>会被解释为纯字符串而不是Lua模式(就像<code>[[#mw.ustring.find|mw.ustring.find()]]</code>的这个参数一样)。返回包含子字符串的表。


比如,<code style="white-space:nowrap">mw.text.split( 'a b\tc\nd', '%s' )</code>会返回表<code style="white-space:nowrap">{ 'a', 'b', 'c', 'd' }</code>。
比如,<code>mw.text.split( 'a b\tc\nd', '%s' )</code>会返回表<code>{ 'a', 'b', 'c', 'd' }</code>。


如果<code>pattern</code>匹配空字符串,<code>s</code>会被分割成单个字符。
如果<code>pattern</code>匹配空字符串,<code>s</code>会被分割成单个字符。


==== mw.text.gsplit ====
==== mw.text.gsplit ====
<code style="white-space:nowrap">mw.text.gsplit( s, pattern, plain )</code>
<code>mw.text.gsplit( s, pattern, plain )</code>


返回会迭代子字符串的[[#iterators|迭代器函数]],返回的相当于调用<code>[[#mw.text.split|mw.text.split()]]</code>。
返回会迭代子字符串的[[#iterators|迭代器函数]],返回的相当于调用<code>[[#mw.text.split|mw.text.split()]]</code>。


==== mw.text.tag ====
==== mw.text.tag ====
<code style="white-space:nowrap">mw.text.tag( name, attrs, content )</code>
<code>mw.text.tag( name, attrs, content )</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.text.tag{ name = string, attrs = table, content = string|false }</code>
<code>mw.text.tag{ name = string, attrs = table, content = string|false }</code>


: ''注意使用了[[#named arguments|命名参数]]。''
: ''注意使用了[[#named arguments|命名参数]]。''
第2,448行: 第2,448行:


==== mw.text.trim ====
==== mw.text.trim ====
<code style="white-space:nowrap">mw.text.trim( s )</code>
<code>mw.text.trim( s )</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.text.trim( s, charset )</code>
<code>mw.text.trim( s, charset )</code>


从字符串的开始和结尾移除空白字符或其他字符。
从字符串的开始和结尾移除空白字符或其他字符。


如果提供了<code>charset</code>,则它应该是合适的字符串,且被[[#Ustring patterns|Ustring模式]]的括号括住,比如<code>[set]</code>中的“set”。默认的charset是ASCII空白字符,<code style="white-space:nowrap">"\t\r\n\f "</code>。
如果提供了<code>charset</code>,则它应该是合适的字符串,且被[[#Ustring patterns|Ustring模式]]的括号括住,比如<code>[set]</code>中的“set”。默认的charset是ASCII空白字符,<code>"\t\r\n\f "</code>。


==== mw.text.truncate ====
==== mw.text.truncate ====
<code style="white-space:nowrap">mw.text.truncate( text, length )</code>
<code>mw.text.truncate( text, length )</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.text.truncate( text, length, ellipsis )</code>
<code>mw.text.truncate( text, length, ellipsis )</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.text.truncate( text, length, ellipsis, adjustLength )</code>
<code>mw.text.truncate( text, length, ellipsis, adjustLength )</code>


将文本<code>text</code>裁剪到指定的长度,如果执行了裁剪,加入<code>ellipsis</code>(省略号)。如果长度为正,则字符串末尾被裁剪,如果为负,则字符串的开头会被裁剪。如果给定了<code>adjustLength</code>且为true,则包含省略号的字符串不会长于指定的长度。
将文本<code>text</code>裁剪到指定的长度,如果执行了裁剪,加入<code>ellipsis</code>(省略号)。如果长度为正,则字符串末尾被裁剪,如果为负,则字符串的开头会被裁剪。如果给定了<code>adjustLength</code>且为true,则包含省略号的字符串不会长于指定的长度。
第2,487行: 第2,487行:


==== mw.text.unstripNoWiki ====
==== mw.text.unstripNoWiki ====
<code style="white-space:nowrap">mw.text.unstripNoWiki( s )</code>
<code>mw.text.unstripNoWiki( s )</code>


将MediaWiki的&lt;nowiki&gt; [[strip marker]]替换为对应的文本。其他类型的strip marker不会改变。
将MediaWiki的&lt;nowiki&gt; [[strip marker]]替换为对应的文本。其他类型的strip marker不会改变。


==== mw.text.unstrip ====
==== mw.text.unstrip ====
<code style="white-space:nowrap">mw.text.unstrip( s )</code>
<code>mw.text.unstrip( s )</code>


等同于<code style="white-space:nowrap">mw.text.killMarkers( mw.text.unstripNoWiki( s ) )</code>。
等同于<code>mw.text.killMarkers( mw.text.unstripNoWiki( s ) )</code>。


这个不在显示特殊页面嵌入包含、&lt;ref&gt;后的HTML,就像Scribunto早期版本的那样。
这个不在显示特殊页面嵌入包含、&lt;ref&gt;后的HTML,就像Scribunto早期版本的那样。
第2,501行: 第2,501行:


==== mw.title.equals ====
==== mw.title.equals ====
<code style="white-space:nowrap">mw.title.equals( a, b )</code>
<code>mw.title.equals( a, b )</code>


检测两个标题是否相等。注意比较时忽略碎片(fragments)。
检测两个标题是否相等。注意比较时忽略碎片(fragments)。


==== mw.title.compare ====
==== mw.title.compare ====
<code style="white-space:nowrap">mw.title.compare( a, b )</code>
<code>mw.title.compare( a, b )</code>


返回-1、0、1,表示标题<code>a</code>是否小于、等于或大于标题<code>b</code>。
返回-1、0、1,表示标题<code>a</code>是否小于、等于或大于标题<code>b</code>。
第2,513行: 第2,513行:


==== mw.title.getCurrentTitle ====
==== mw.title.getCurrentTitle ====
<code style="white-space:nowrap">mw.title.getCurrentTitle()</code>
<code>mw.title.getCurrentTitle()</code>


返回当前页面的标题对象。
返回当前页面的标题对象。


==== mw.title.new ====
==== mw.title.new ====
<code style="white-space:nowrap">mw.title.new( text, namespace )</code>
<code>mw.title.new( text, namespace )</code>
<br/>
<br/>
<code style="white-space:nowrap">mw.title.new( id )</code>
<code>mw.title.new( id )</code>


: {{red|用ID调用时该函数是高开销函数}}
: {{red|用ID调用时该函数是高开销函数}}
第2,531行: 第2,531行:


==== mw.title.makeTitle ====
==== mw.title.makeTitle ====
<code style="white-space:nowrap">mw.title.makeTitle( namespace, title, fragment, interwiki )</code>
<code>mw.title.makeTitle( namespace, title, fragment, interwiki )</code>


创建命名空间<code>namespace</code>内标题<code>title</code>的标题对象,可以有指定的<code>fragment</code>和<code>interwiki</code>前缀。<code>namespace</code>可以是在<code>[[#mw.site.namespaces|mw.site.namespaces]]</code>中找到的任何键。如果结果的标题无效,返回nil。
创建命名空间<code>namespace</code>内标题<code>title</code>的标题对象,可以有指定的<code>fragment</code>和<code>interwiki</code>前缀。<code>namespace</code>可以是在<code>[[#mw.site.namespaces|mw.site.namespaces]]</code>中找到的任何键。如果结果的标题无效,返回nil。


注意,不像<code>[[#mw.title.new|mw.title.new()]]</code>,这个方法总会应用指定的命名空间。比如,<code style="white-space:nowrap">mw.title.makeTitle( 'Template', 'Module:Foo' )</code> 会为页面Template:Module:Foo创建对象,而<code style="white-space:nowrap">mw.title.new( 'Module:Foo', 'Template' )</code>会为页面Module:Foo创建对象。
注意,不像<code>[[#mw.title.new|mw.title.new()]]</code>,这个方法总会应用指定的命名空间。比如,<code>mw.title.makeTitle( 'Template', 'Module:Foo' )</code> 会为页面Template:Module:Foo创建对象,而<code>mw.title.new( 'Module:Foo', 'Template' )</code>会为页面Module:Foo创建对象。


==== 标题对象 ====
==== 标题对象 ====
第2,571行: 第2,571行:
* '''contentModel''':此标题的内容模型,字符串,{{red|可能会造成[[#Expensive properties|高开销]]}}。
* '''contentModel''':此标题的内容模型,字符串,{{red|可能会造成[[#Expensive properties|高开销]]}}。
<includeonly>* '''pageLanguage''':此标题的页面语言,语言对象类似于<code>[[#mw.language.getContentLanguage|mw.language.getContentLanguage]]</code>返回的默认值,但是取决于特定页面。{{red|此函数[[#Expensive properties|可能由较高开销]]}}。</includeonly>
<includeonly>* '''pageLanguage''':此标题的页面语言,语言对象类似于<code>[[#mw.language.getContentLanguage|mw.language.getContentLanguage]]</code>返回的默认值,但是取决于特定页面。{{red|此函数[[#Expensive properties|可能由较高开销]]}}。</includeonly>
* '''basePageTitle''':等同于<code style="white-space:nowrap">mw.title.makeTitle( title.namespace, title.baseText )</code>。
* '''basePageTitle''':等同于<code>mw.title.makeTitle( title.namespace, title.baseText )</code>。
* '''rootPageTitle''':等同于<code style="white-space:nowrap">mw.title.makeTitle( title.namespace, title.rootText )</code>。
* '''rootPageTitle''':等同于<code>mw.title.makeTitle( title.namespace, title.rootText )</code>。
* '''talkPageTitle''':等同于<code style="white-space:nowrap">mw.title.makeTitle( mw.site.namespaces[title.namespace].talk.id, title.text )</code>,如果该标题没有讨论页则为<code>nil</code>。
* '''talkPageTitle''':等同于<code>mw.title.makeTitle( mw.site.namespaces[title.namespace].talk.id, title.text )</code>,如果该标题没有讨论页则为<code>nil</code>。
* '''subjectPageTitle''':等同于<code style="white-space:nowrap">mw.title.makeTitle( mw.site.namespaces[title.namespace].subject.id, title.text )</code>。
* '''subjectPageTitle''':等同于<code>mw.title.makeTitle( mw.site.namespaces[title.namespace].subject.id, title.text )</code>。
* '''redirectTarget''':返回重定向页面的目标页面的标题对象,但如果不是重定向页面,则返回<code>false</code>。
* '''redirectTarget''':返回重定向页面的目标页面的标题对象,但如果不是重定向页面,则返回<code>false</code>。
* '''protectionLevels''':页面的保护等级。其值为一个表,键对应每个操作(如<code>"edit"</code>、<code>"move"</code>),值为数组,第一项是包含对应保护等级的字符串,如果页面未被保护,则表的值或者数组的项就会为<code>nil</code>。{{red|此函数高开销}}。
* '''protectionLevels''':页面的保护等级。其值为一个表,键对应每个操作(如<code>"edit"</code>、<code>"move"</code>),值为数组,第一项是包含对应保护等级的字符串,如果页面未被保护,则表的值或者数组的项就会为<code>nil</code>。{{red|此函数高开销}}。
* '''cascadingProtection''':该页面应用的级联保护,为一个表,键为<code>"restrictions"</code>(自身为一个表,键类似于<code>protectionLevels</code>拥有的那些)和<code>"sources"</code>(列举保护级联来源的标题的数组)。如果没有保护级联到此页面,则<code>"restrictions"</code>和<code>"sources"</code>可能是空的。{{red|此函数开销较高}}。
* '''cascadingProtection''':该页面应用的级联保护,为一个表,键为<code>"restrictions"</code>(自身为一个表,键类似于<code>protectionLevels</code>拥有的那些)和<code>"sources"</code>(列举保护级联来源的标题的数组)。如果没有保护级联到此页面,则<code>"restrictions"</code>和<code>"sources"</code>可能是空的。{{red|此函数开销较高}}。
* '''subPageTitle( text )''':等同于<code style="white-space:nowrap">mw.title.makeTitle( title.namespace, title.text .. '/' .. <var>text</var> )</code>。
* '''subPageTitle( text )''':等同于<code>mw.title.makeTitle( title.namespace, title.text .. '/' .. <var>text</var> )</code>。
* '''partialUrl()''':返回编码的<code>title.text</code>,就像在URL中会有的那样。
* '''partialUrl()''':返回编码的<code>title.text</code>,就像在URL中会有的那样。
* '''fullUrl( query, proto )'''::返回此标题的完整URL(带有可选的query表/字符串)。可以指定<var>proto</var>以控制返回URL的协议:<code>"http"</code>、<code>"https"</code>、<code>"relative"</code>(默认值)或<code>"canonical"</code>。
* '''fullUrl( query, proto )'''::返回此标题的完整URL(带有可选的query表/字符串)。可以指定<var>proto</var>以控制返回URL的协议:<code>"http"</code>、<code>"https"</code>、<code>"relative"</code>(默认值)或<code>"canonical"</code>。
第2,585行: 第2,585行:
* '''getContent()''':返回页面的(未解析的)内容,如果页面不存在则返回<code>nil</code>。页面会被记录为嵌入包含。
* '''getContent()''':返回页面的(未解析的)内容,如果页面不存在则返回<code>nil</code>。页面会被记录为嵌入包含。


标题对象可以使用[[#Relational operators|关系运算符]]比较。<code style="white-space:nowrap">[[#tostring|tostring]]( title )</code>会返回<code>title.prefixedText</code>。
标题对象可以使用[[#Relational operators|关系运算符]]比较。<code>[[#tostring|tostring]]( title )</code>会返回<code>title.prefixedText</code>。


由于这可能难以置信,所以请注意获取标题对象的任何[[#Expensive properties|高开销]]的字段会记录一次对页面的“链入”(就像[[Special:WhatLinksHere|Special:链入页面]]中展示的那样)。使用标题对象的<code>getContent()</code>方法或访问<code>redirectTarget</code>字段会记录为“{{int|istemplate}}”,访问标题对象的<code>file</code>或<code>fileExists</code>字段会记录为“{{int|isimage}}”。
由于这可能难以置信,所以请注意获取标题对象的任何[[#Expensive properties|高开销]]的字段会记录一次对页面的“链入”(就像[[Special:WhatLinksHere|Special:链入页面]]中展示的那样)。使用标题对象的<code>getContent()</code>方法或访问<code>redirectTarget</code>字段会记录为“{{int|istemplate}}”,访问标题对象的<code>file</code>或<code>fileExists</code>字段会记录为“{{int|isimage}}”。
第2,611行: 第2,611行:


==== mw.uri.encode ====
==== mw.uri.encode ====
<code style="white-space:nowrap">mw.uri.encode( s, enctype )</code>
<code>mw.uri.encode( s, enctype )</code>


[[百分号编码|百分号编码]]字符串。默认类型,<code>"QUERY"</code>,使用“+”编码空格以用于查询字符;<code>"PATH"</code>将空格编码为%20,<code>"WIKI"</code>将空格编码为“_”。
[[百分号编码|百分号编码]]字符串。默认类型,<code>"QUERY"</code>,使用“+”编码空格以用于查询字符;<code>"PATH"</code>将空格编码为%20,<code>"WIKI"</code>将空格编码为“_”。
第2,618行: 第2,618行:


==== mw.uri.decode ====
==== mw.uri.decode ====
<code style="white-space:nowrap">mw.uri.decode( s, enctype )</code>
<code>mw.uri.decode( s, enctype )</code>


[[百分号编码|百分号解码]]字符串。默认类型,<code>"QUERY"</code>,将“+”解码为空格;<code>"PATH"</code>不执行额外的解码,<code>"WIKI"</code>将“_”解码为空格。
[[百分号编码|百分号解码]]字符串。默认类型,<code>"QUERY"</code>,将“+”解码为空格;<code>"PATH"</code>不执行额外的解码,<code>"WIKI"</code>将“_”解码为空格。


==== mw.uri.anchorEncode ====
==== mw.uri.anchorEncode ====
<code style="white-space:nowrap">mw.uri.anchorEncode( s )</code>
<code>mw.uri.anchorEncode( s )</code>


编码字符串以用于MediaWiki URI fragment。
编码字符串以用于MediaWiki URI fragment。


==== mw.uri.buildQueryString ====
==== mw.uri.buildQueryString ====
<code style="white-space:nowrap">mw.uri.buildQueryString( table )</code>
<code>mw.uri.buildQueryString( table )</code>


将表编码为URI查询字符串。键必须是字符串,值可以是字符串、数字、序列表或布尔值false。
将表编码为URI查询字符串。键必须是字符串,值可以是字符串、数字、序列表或布尔值false。


==== mw.uri.parseQueryString ====
==== mw.uri.parseQueryString ====
<code style="white-space:nowrap">mw.uri.parseQueryString( s, i, j )</code>
<code>mw.uri.parseQueryString( s, i, j )</code>


将查询字符串<code>s</code>解码为表。字符串中没有值的键会拥有false值,重复多次的键会有序列表作为其值,其他的都会有字符串作为值。
将查询字符串<code>s</code>解码为表。字符串中没有值的键会拥有false值,重复多次的键会有序列表作为其值,其他的都会有字符串作为值。
第2,640行: 第2,640行:


==== mw.uri.canonicalUrl ====
==== mw.uri.canonicalUrl ====
<code style="white-space:nowrap">mw.uri.canonicalUrl( page, query )</code>
<code>mw.uri.canonicalUrl( page, query )</code>


返回页面的[[Help:Magic_words#URL_data|规范URL]]的[[#URI object|URI对象]],可选查询字符串或表。
返回页面的[[Help:Magic_words#URL_data|规范URL]]的[[#URI object|URI对象]],可选查询字符串或表。


==== mw.uri.fullUrl ====
==== mw.uri.fullUrl ====
<code style="white-space:nowrap">mw.uri.fullUrl( page, query )</code>
<code>mw.uri.fullUrl( page, query )</code>


返回页面的[[Help:Magic_words#URL_data|完整URL]]的[[#URI object|URI对象]],可选查询字符串或表。
返回页面的[[Help:Magic_words#URL_data|完整URL]]的[[#URI object|URI对象]],可选查询字符串或表。


==== mw.uri.localUrl ====
==== mw.uri.localUrl ====
<code style="white-space:nowrap">mw.uri.localUrl( page, query )</code>
<code>mw.uri.localUrl( page, query )</code>


返回页面的[[Help:Magic_words#URL_data|本地URL]]的[[#URI object|URI对象]],可选查询字符串或表。
返回页面的[[Help:Magic_words#URL_data|本地URL]]的[[#URI object|URI对象]],可选查询字符串或表。


==== mw.uri.new ====
==== mw.uri.new ====
<code style="white-space:nowrap">mw.uri.new( s )</code>
<code>mw.uri.new( s )</code>


利用传入的字符串或表构造一个新的[[#URI object|URI对象]]。参见URI对象的描述以了解表可能的字段。
利用传入的字符串或表构造一个新的[[#URI object|URI对象]]。参见URI对象的描述以了解表可能的字段。


==== mw.uri.validate ====
==== mw.uri.validate ====
<code style="white-space:nowrap">mw.uri.validate( table )</code>
<code>mw.uri.validate( table )</code>


验证传入的表(或URI对象)是否有效。返回布尔值,以表示表是否有效,以及如果无效,一个描述问题发生原因的字符串。
验证传入的表(或URI对象)是否有效。返回布尔值,以表示表是否有效,以及如果无效,一个描述问题发生原因的字符串。
第2,689行: 第2,689行:


===== mw.uri:parse =====
===== mw.uri:parse =====
<code style="white-space:nowrap">uri:parse( s )</code>
<code>uri:parse( s )</code>


将字符串解析为当前的URI对象。字符串中指定的任何字段都会被当前的对象替换;未指定的字段都会保留旧值。
将字符串解析为当前的URI对象。字符串中指定的任何字段都会被当前的对象替换;未指定的字段都会保留旧值。
第2,699行: 第2,699行:


===== mw.uri:extend =====
===== mw.uri:extend =====
<code style="white-space:nowrap">uri:extend( parameters )</code>
<code>uri:extend( parameters )</code>


将参数表合并到对象的查询表。
将参数表合并到对象的查询表。
第2,716行: 第2,716行:


==== mw.ustring.byte ====
==== mw.ustring.byte ====
<code style="white-space:nowrap">mw.ustring.byte( s, i, j )</code>
<code>mw.ustring.byte( s, i, j )</code>


返回单独的字节,等同于[[#string.byte|string.byte()]]。
返回单独的字节,等同于[[#string.byte|string.byte()]]。


==== mw.ustring.byteoffset ====
==== mw.ustring.byteoffset ====
<code style="white-space:nowrap">mw.ustring.byteoffset( s, l, i )</code>
<code>mw.ustring.byteoffset( s, l, i )</code>


返回字符在字符串内的字节偏移值。<code>l</code>和<code>i</code>的默认值都是1.<code>i</code>可以是负数,即倒过来计数。
返回字符在字符串内的字节偏移值。<code>l</code>和<code>i</code>的默认值都是1.<code>i</code>可以是负数,即倒过来计数。
第2,728行: 第2,728行:


==== mw.ustring.char ====
==== mw.ustring.char ====
<code style="white-space:nowrap">mw.ustring.char( ... )</code>
<code>mw.ustring.char( ... )</code>


非常像[[#string.char|string.char()]],但是整数为Unicode代码点而非字节值。
非常像[[#string.char|string.char()]],但是整数为Unicode代码点而非字节值。
第2,737行: 第2,737行:


==== mw.ustring.codepoint ====
==== mw.ustring.codepoint ====
<code style="white-space:nowrap">mw.ustring.codepoint( s, i, j )</code>
<code>mw.ustring.codepoint( s, i, j )</code>


很像[[#string.byte|string.byte()]],但是返回的值是代码点,且偏移值为字符而非字节。
很像[[#string.byte|string.byte()]],但是返回的值是代码点,且偏移值为字符而非字节。


==== mw.ustring.find ====
==== mw.ustring.find ====
<code style="white-space:nowrap">mw.ustring.find( s, pattern, init, plain )</code>
<code>mw.ustring.find( s, pattern, init, plain )</code>


非常像[[#string.find|string.find()]],但是匹配模式是扩展了的,在[[#Ustring patterns|Ustring patterns]]中有描述,且<code>init</code>是按照字符而非字节。
非常像[[#string.find|string.find()]],但是匹配模式是扩展了的,在[[#Ustring patterns|Ustring patterns]]中有描述,且<code>init</code>是按照字符而非字节。


==== mw.ustring.format ====
==== mw.ustring.format ====
<code style="white-space:nowrap">mw.ustring.format( format, ... )</code>
<code>mw.ustring.format( format, ... )</code>


等同于[[#string.format|string.format()]]。字符串的宽度和精度是以字节表达,而非编号。
等同于[[#string.format|string.format()]]。字符串的宽度和精度是以字节表达,而非编号。


==== mw.ustring.gcodepoint ====
==== mw.ustring.gcodepoint ====
<code style="white-space:nowrap">mw.ustring.gcodepoint( s, i, j )</code>
<code>mw.ustring.gcodepoint( s, i, j )</code>


返回用于在字符串内迭代代码点的三个值。<code>i</code>默认为1,<code>j</code>默认为-1。这是为了用于[[#iterators|<code>for</code>形式的迭代]]:
返回用于在字符串内迭代代码点的三个值。<code>i</code>默认为1,<code>j</code>默认为-1。这是为了用于[[#iterators|<code>for</code>形式的迭代]]:
第2,763行: 第2,763行:


==== mw.ustring.gmatch ====
==== mw.ustring.gmatch ====
<code style="white-space:nowrap">mw.ustring.gmatch( s, pattern )</code>
<code>mw.ustring.gmatch( s, pattern )</code>


非常像[[#string.gmatch|string.gmatch()]],但是匹配模式是扩展了的,在[[#Ustring patterns|ustring匹配模式]]中有描述。
非常像[[#string.gmatch|string.gmatch()]],但是匹配模式是扩展了的,在[[#Ustring patterns|ustring匹配模式]]中有描述。


==== mw.ustring.gsub ====
==== mw.ustring.gsub ====
<code style="white-space:nowrap">mw.ustring.gsub( s, pattern, repl, n )</code>
<code>mw.ustring.gsub( s, pattern, repl, n )</code>


非常像[[#string.gsub|string.gsub()]],但是匹配模式是扩展了的,在[[#Ustring patterns|ustring匹配模式]]中有描述。
非常像[[#string.gsub|string.gsub()]],但是匹配模式是扩展了的,在[[#Ustring patterns|ustring匹配模式]]中有描述。


==== mw.ustring.isutf8 ====
==== mw.ustring.isutf8 ====
<code style="white-space:nowrap">mw.ustring.isutf8( s )</code>
<code>mw.ustring.isutf8( s )</code>


若字符串是有效的UTF-8,返回true,否则返回false。
若字符串是有效的UTF-8,返回true,否则返回false。


==== mw.ustring.len ====
==== mw.ustring.len ====
<code style="white-space:nowrap">mw.ustring.len( s )</code>
<code>mw.ustring.len( s )</code>


返回字符串的长度,或者不是有效的UTF-8时返回nil。
返回字符串的长度,或者不是有效的UTF-8时返回nil。
第2,785行: 第2,785行:


==== mw.ustring.lower ====
==== mw.ustring.lower ====
<code style="white-space:nowrap">mw.ustring.lower( s )</code>
<code>mw.ustring.lower( s )</code>


非常像[[#string.lower|string.lower()]],但是所有在Unicode中定义了小写到大写转换的字符都会被转换。
非常像[[#string.lower|string.lower()]],但是所有在Unicode中定义了小写到大写转换的字符都会被转换。
第2,792行: 第2,792行:


==== mw.ustring.match ====
==== mw.ustring.match ====
<code style="white-space:nowrap">mw.ustring.match( s, pattern, init )</code>
<code>mw.ustring.match( s, pattern, init )</code>


非常像[[#string.match|string.match()]],但是匹配模式是扩展了的,在[[#Ustring patterns|ustring匹配模式]]中有描述,且<code>init</code>偏移是按照字符而非字节。
非常像[[#string.match|string.match()]],但是匹配模式是扩展了的,在[[#Ustring patterns|ustring匹配模式]]中有描述,且<code>init</code>偏移是按照字符而非字节。


==== mw.ustring.rep ====
==== mw.ustring.rep ====
<code style="white-space:nowrap">mw.ustring.rep( s, n )</code>
<code>mw.ustring.rep( s, n )</code>


等同于[[#string.rep|string.format()]]。
等同于[[#string.rep|string.format()]]。


==== mw.ustring.sub ====
==== mw.ustring.sub ====
<code style="white-space:nowrap">mw.ustring.sub( s, i, j )</code>
<code>mw.ustring.sub( s, i, j )</code>


非常像[[#string.sub|string.sub()]],但是偏移值为字符而非字节。
非常像[[#string.sub|string.sub()]],但是偏移值为字符而非字节。


==== mw.ustring.toNFC ====
==== mw.ustring.toNFC ====
<code style="white-space:nowrap">mw.ustring.toNFC( s )</code>
<code>mw.ustring.toNFC( s )</code>


将字符串转化为[[Unicode等价性|正规形式C]]。如果字符串不是有效的UTF-8则返回nil。
将字符串转化为[[Unicode等价性|正规形式C]]。如果字符串不是有效的UTF-8则返回nil。


==== mw.ustring.toNFD ====
==== mw.ustring.toNFD ====
<code style="white-space:nowrap">mw.ustring.toNFD( s )</code>
<code>mw.ustring.toNFD( s )</code>


将字符串转化为[[Unicode等价性|正规形式D]]。如果字符串不是有效的UTF-8则返回nil。
将字符串转化为[[Unicode等价性|正规形式D]]。如果字符串不是有效的UTF-8则返回nil。


==== mw.ustring.upper ====
==== mw.ustring.upper ====
<code style="white-space:nowrap">mw.ustring.upper( s )</code>
<code>mw.ustring.upper( s )</code>


非常像[[#string.upper|string.upper()]],但是所有在Unicode中定义了大写到小写转换的字符都会被转换。
非常像[[#string.upper|string.upper()]],但是所有在Unicode中定义了大写到小写转换的字符都会被转换。
第2,856行: 第2,856行:


==== bit32.band ====
==== bit32.band ====
<code style="white-space:nowrap">bit32.band( ... )</code>
<code>bit32.band( ... )</code>


返回参数的“按位与”运算:对于结果中的每一位,只有当所有参数中都设置了该位时,结果中才会有这一位。
返回参数的“按位与”运算:对于结果中的每一位,只有当所有参数中都设置了该位时,结果中才会有这一位。
第2,863行: 第2,863行:


==== bit32.bnot ====
==== bit32.bnot ====
<code style="white-space:nowrap">bit32.bnot( x )</code>
<code>bit32.bnot( x )</code>


返回<code>x</code>的“取反”。
返回<code>x</code>的“取反”。


==== bit32.bor ====
==== bit32.bor ====
<code style="white-space:nowrap">bit32.bor( ... )</code>
<code>bit32.bor( ... )</code>


返回参数的“按位或”运算:对于结果中的每一位,只要所有参数中有任何一个设置了该位,结果中就会有这一位。
返回参数的“按位或”运算:对于结果中的每一位,只要所有参数中有任何一个设置了该位,结果中就会有这一位。
第2,875行: 第2,875行:


==== bit32.btest ====
==== bit32.btest ====
<code style="white-space:nowrap">bit32.btest( ... )</code>
<code>bit32.btest( ... )</code>


等同于<code style="white-space:nowrap">bit32.band( ... ) ~= 0</code>
等同于<code>bit32.band( ... ) ~= 0</code>


==== bit32.bxor ====
==== bit32.bxor ====
<code style="white-space:nowrap">bit32.bxor( ... )</code>
<code>bit32.bxor( ... )</code>


返回参数的“按位异或”运算:对于结果中的每一位,只有所有参数中设置了该位的参数个数为奇数,结果中才会有这一位。
返回参数的“按位异或”运算:对于结果中的每一位,只有所有参数中设置了该位的参数个数为奇数,结果中才会有这一位。
第2,887行: 第2,887行:


==== bit32.extract ====
==== bit32.extract ====
<code style="white-space:nowrap">bit32.extract( n, field, width )</code>
<code>bit32.extract( n, field, width )</code>


从<code>n</code>导出<code>width</code>位,以<code>field</code>为开始。访问0到31范围之外的位都是错误的。
从<code>n</code>导出<code>width</code>位,以<code>field</code>为开始。访问0到31范围之外的位都是错误的。
第2,894行: 第2,894行:


==== bit32.replace ====
==== bit32.replace ====
<code style="white-space:nowrap">bit32.replace( n, v, field, width )</code>
<code>bit32.replace( n, v, field, width )</code>


替换<code>n</code>中的<code>width</code>位,以<code>field</code>位开始,<code>v</code>开始的低<code>width</code>位。访问0到31范围之外的位都是错误的。
替换<code>n</code>中的<code>width</code>位,以<code>field</code>位开始,<code>v</code>开始的低<code>width</code>位。访问0到31范围之外的位都是错误的。
第2,901行: 第2,901行:


==== bit32.lshift ====
==== bit32.lshift ====
<code style="white-space:nowrap">bit32.lshift( n, disp )</code>
<code>bit32.lshift( n, disp )</code>


返回数<code>n</code>向左[[位操作#移位|移动]]<code>disp</code>位。这是一个[[位操作#逻辑移位|逻辑移位]]:插入的位为0。这通常相当于乘以2的<code>disp</code>次方。
返回数<code>n</code>向左[[位操作#移位|移动]]<code>disp</code>位。这是一个[[位操作#逻辑移位|逻辑移位]]:插入的位为0。这通常相当于乘以2的<code>disp</code>次方。
第2,908行: 第2,908行:


==== bit32.rshift ====
==== bit32.rshift ====
<code style="white-space:nowrap">bit32.rshift( n, disp )</code>
<code>bit32.rshift( n, disp )</code>


返回数<code>n</code>向右[[位操作#移位|移动]]<code>disp</code>位。这是一个[[位操作#逻辑移位|逻辑移位]]:插入的位为0。这通常相当于除以2的<code>disp</code>次方。
返回数<code>n</code>向右[[位操作#移位|移动]]<code>disp</code>位。这是一个[[位操作#逻辑移位|逻辑移位]]:插入的位为0。这通常相当于除以2的<code>disp</code>次方。
第2,915行: 第2,915行:


==== bit32.arshift ====
==== bit32.arshift ====
<code style="white-space:nowrap">bit32.arshift( n, disp )</code>
<code>bit32.arshift( n, disp )</code>


返回数<code>n</code>向右[[位操作#移位|移动]]<code>disp</code>位。这是一个[[算数移位|算数移位]]:如果<code>disp</code>是正的,那么插入的位将会与原始数字的31位相同。
返回数<code>n</code>向右[[位操作#移位|移动]]<code>disp</code>位。这是一个[[算数移位|算数移位]]:如果<code>disp</code>是正的,那么插入的位将会与原始数字的31位相同。
第2,922行: 第2,922行:


==== bit32.lrotate ====
==== bit32.lrotate ====
<code style="white-space:nowrap">bit32.lrotate( n, disp )</code>
<code>bit32.lrotate( n, disp )</code>


返回数<code>n</code>向左旋转<code>disp</code>位。
返回数<code>n</code>向左旋转<code>disp</code>位。
第2,929行: 第2,929行:


==== bit32.rrotate ====
==== bit32.rrotate ====
<code style="white-space:nowrap">bit32.rrotate( n, disp )</code>
<code>bit32.rrotate( n, disp )</code>


返回数<code>n</code>向右旋转<code>disp</code>位。
返回数<code>n</code>向右旋转<code>disp</code>位。
第2,942行: 第2,942行:


==== libraryUtil.checkType ====
==== libraryUtil.checkType ====
<code style="white-space:nowrap">libraryUtil.checkType( name, argIdx, arg, expectType, nilOk )</code>
<code>libraryUtil.checkType( name, argIdx, arg, expectType, nilOk )</code>


<code style="white-space:nowrap">[[#type|type]]( arg )</code>不符合预期类型<code>expectType</code>时报错。此外,如果<code>arg</code>是nil且<code>nilOk</code>为true,则不会报错。
<code>[[#type|type]]( arg )</code>不符合预期类型<code>expectType</code>时报错。此外,如果<code>arg</code>是nil且<code>nilOk</code>为true,则不会报错。


<code>name</code>是调用函数的名称,<code>argIdx</code>是参数列表中参数的位置。这些用于格式化错误消息。
<code>name</code>是调用函数的名称,<code>argIdx</code>是参数列表中参数的位置。这些用于格式化错误消息。


==== libraryUtil.checkTypeMulti ====
==== libraryUtil.checkTypeMulti ====
<code style="white-space:nowrap">libraryUtil.checkTypeMulti( name, argIdx, arg, expectTypes )</code>
<code>libraryUtil.checkTypeMulti( name, argIdx, arg, expectTypes )</code>


<code style="white-space:nowrap">[[#type|type]]( arg )</code>不符合预期类型数组<code>expectTypes</code>中的任何字符串时报错。
<code>[[#type|type]]( arg )</code>不符合预期类型数组<code>expectTypes</code>中的任何字符串时报错。


用于可以有多个有效类型的参数。
用于可以有多个有效类型的参数。


==== libraryUtil.checkTypeForIndex ====
==== libraryUtil.checkTypeForIndex ====
<code style="white-space:nowrap">libraryUtil.checkTypeForIndex( index, value, expectType )</code>
<code>libraryUtil.checkTypeForIndex( index, value, expectType )</code>


<code style="white-space:nowrap">[[#type|type]]( value )</code>不符合预期类型<code>expectType</code>时报错。
<code>[[#type|type]]( value )</code>不符合预期类型<code>expectType</code>时报错。


用于实现<code>__newindex</code>[[#Metatables|元方法]]。
用于实现<code>__newindex</code>[[#Metatables|元方法]]。


==== libraryUtil.checkTypeForNamedArg ====
==== libraryUtil.checkTypeForNamedArg ====
<code style="white-space:nowrap">libraryUtil.checkTypeForNamedArg( name, argName, arg, expectType, nilOk )</code>
<code>libraryUtil.checkTypeForNamedArg( name, argName, arg, expectType, nilOk )</code>


<code style="white-space:nowrap">[[#type|type]]( arg )</code>不符合预期类型<code>expectType</code>时报错。此外,如果<code>arg</code>是nil且<code>nilOk</code>为true,则不会报错。
<code>[[#type|type]]( arg )</code>不符合预期类型<code>expectType</code>时报错。此外,如果<code>arg</code>是nil且<code>nilOk</code>为true,则不会报错。


在使用Lua的命名参数语法(<code style="white-space:nowrap">func{ name = value }</code>)中,此函数用作<code>[[#libraryUtil.checkType|libraryUtil.checkType()]]</code>的等效。
在使用Lua的命名参数语法(<code>func{ name = value }</code>)中,此函数用作<code>[[#libraryUtil.checkType|libraryUtil.checkType()]]</code>的等效。


==== libraryUtil.makeCheckSelfFunction ====
==== libraryUtil.makeCheckSelfFunction ====
<code style="white-space:nowrap">libraryUtil.makeCheckSelfFunction( libraryName, varName, selfObj, selfObjDesc )</code>
<code>libraryUtil.makeCheckSelfFunction( libraryName, varName, selfObj, selfObjDesc )</code>


此函数用于在用于被<code>obj:method()</code>语法调用的对象表中实现“方法”,会返回一个应该在这些方法顶部调用的函数,并使用<code>self</code>参数和方法名称,如果<code>self</code>对象不是<code>selfObject</code>则会抛出错误。
此函数用于在用于被<code>obj:method()</code>语法调用的对象表中实现“方法”,会返回一个应该在这些方法顶部调用的函数,并使用<code>self</code>参数和方法名称,如果<code>self</code>对象不是<code>selfObject</code>则会抛出错误。