Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
api:transforms:zh [2023/12/01 07:23]
hfsr [Transforms(变换) API]
api:transforms:zh [2023/12/01 07:52]
hfsr [Transforms(变换) API]
Line 33: Line 33:
     一些tranform方法可能会将第二个参数指定为可选,例如`transforms.first()`。  ​     一些tranform方法可能会将第二个参数指定为可选,例如`transforms.first()`。  ​
 \\ \\
-    ​一些transform方法可能会指定其他类型的判断函数,例如表或字符串。这些判断函数的用法特定于对应的方法,且在此处详细列出的方法中定义。+一些transform方法可能会指定其他类型的判断类型,例如表或字符串。这些判断函数的用法特定于对应的方法,且在此处详细列出的方法中定义。
  
 ==== 方法 ==== ==== 方法 ====
  
-* `transforms.sub(tbl:​ table, first: number, last: number or nil): table` +* `transforms.sub(tbl:​ table, first: number, last: number or nil): table` ​  
- +  与`string.sub`作用类似,返回`tbl`从`first`到`last`的子表。 ​  
-  与 `string.sub` 作用类似,返回`tbl`从`first`到`last`的子表。 +\\ 
- +* `transforms.first(tbl:​ table, predicate: function or table, first: number or nil, last: number or nil): number, number` ​  
-* `transforms.first(tbl:​ table, predicate: function or table, first: number or nil, last: number or nil): number, number` +  返回`tbl`中(范围在`first`与`last`索引之间,包含首尾)满足`predicate`的首个元素的索引。第二个返回值为连续匹配的元素最后一个的索引。一般而言会返回两个同样的值,即匹配的连续元素为1个。`predicate`可以返回第二个返回值(可选),代表匹配的连续元素序列长度。 ​  
- +\\ 
-  返回`tbl`中(范围在`first`与`last`索引之间,包含首尾)满足`predicate`的首个元素的索引。第二个返回值为最后一个连续匹配的元素索引。一般而言会返回两个同样的值,即匹配的连续元素为1个。`predicate`可以返回第二个返回值(可选),代表匹配的连续元素序列长度。 +  当`predicate`为表时,`transforms.first()`将会返回`tbl`中首个满足条件的子表的首尾索引值,这种情况下的匹配指匹配`predicate`表中的任一元素。 ​  
- +\\
-  当`predicate`为表时,`transforms.first()`将会返回`tbl`中首个满足条件的子表的首尾索引值,这种情况下的匹配指匹配`predicate`表中的任一元素。 +
   样例:   样例:
  
Line 80: Line 78:
 ``` ```
  
-* `transforms.partition(tbl:​ table, partioner: function, first: number or nil, last: number or nil): table of tables` +* `transforms.partition(tbl:​ table, partioner: function, first: number or nil, last: number or nil): table of tables` ​  
- +  返回一个子表的列表,子表来自`tbl`,由`partioner`生成,来源范围为从`first`到`last`。`partioner`为判断函数,定义见前文。 ​  
-  返回一个子表的列表,子表来自`tbl`,由`partioner`生成,范围为从`first`到`last`。`partioner`为判断函数,定义见前文。 +\\ 
- +  传递给`partitioner`的`index`参数将会跳过子表的范围,即此参数会增加`n`,`n`即为分区大小。  ​ 
-  传递给`partitioner`的`index`参数将会跳过范围,即此参数会增加`n`,`n`即为分区大小。 +\\ 
-   +  此方法的`partitioner`判断函数必须同时返回匹配的元素组的开始与结束索引。请再次参见前文的`predicate`相关信息。 ​  
-  此方法的`partitioner`判断函数必须同时返回匹配的元素组的开始与结束索引。请再次参见前文的`predicate`相关信息。 +\\ 
- +* `transforms.begins(tbl:​ table, sub: table, first: number or nil, last: number or nil)`   
-* `transforms.begins(tbl:​ table, sub: table, first: number or nil, last: number or nil)` +  若`tbl`从`first`到`last`的子表完全组成`v`(自首个元素对齐),则返回`true`。`first`与`last`元素可以正确处理负数。上文描述也就是说: ​  
- +  `v[1] == tbl[first + 0]`   
-  若`tbl`从`first`到`last`的子表完全组成`sub`(自首个元素对齐),则返回`true`。`first`与`last`元素可以正确处理负数。上面的表达也就是说: +  `v[2] == tbl[first + 1]`   
-   +  ...   
-  `v[1] == tbl[first + 0]` +  `v[#v] == tbl[first + #v - 1]`   
- +\\ 
-  `v[2] == tbl[first + 1]` +  此处的`first + #v - 1`在`tbl`的`[first,​ last]`范围内。 ​  
- +\\ 
-  ... +* `transforms.foreach(tbl:​ table, adapter: function, first: number or nil, last: number or nil)`   
- +  返回`tbl`中从`first`到`last`的每个元素的修改版本。若`adapter`的结果出现`nil`则会被忽略,不会被加入结果。 ​  
-  `v[#v] == tbl[first + #v - 1]` +  `adapter`函数遵循判断函数的格式,除了返回值处理方面。  ​ 
- +  * **Adapter函数返回值** ​  
- +  简单的情况是返回单个值,例如`tx.foreach({'​a',​ '​b',​ '​c'​},​ string.upper)`将会返回`{'​A',​ '​B',​ '​C'​}`。 ​  
-  此处的`first + #v - 1`在`tbl`的`[first,​ last]`范围内。. +  adapter函数可以通过返回`nil`来跳过某个值。例如,`tx.foreach({'​1',​ '​foobar',​ '​2'​},​ function(n) return tonumber(n) end)`将会返回`{1,​ 2}`。 ​  
- +  `adapter`函数可以返回第二个值,此值会被用作结果的下个序号。例如`tx.foreach({'​1','​foobar','​3'​},​function(n,​i) return tonumber(n),​ tostring(i) end)`将会返回`{["​1"​]=1,​ ["​3"​]=3}`
-* `transforms.foreach(tbl:​ table, adapter: function, first: number or nil, last: number or nil)` +
- +
-  返回`tbl`中从`first`到`last`的每个元素的修改版本。若`adapter`的结果出现`nil`则会被忽略,不会被加入结果。 +
-   +
-  `adapter`函数遵循判断函数的格式,除了返回值处理方面 +
- +
-  * **Adapter函数返回值** +
- +
-  简单的情况是返回单个值,例如`tx.foreach({'​a',​ '​b',​ '​c'​},​ string.upper)`将会返回`{'​A',​ '​B',​ '​C'​}`。 +
-   +
-  adapter函数可以通过返回`nil`来跳过某个值。例如,`tx.foreach({'​1',​ '​foobar',​ '​2'​},​ function(n) return tonumber(n) end)`将会返回`{1,​ 2}`。 +
- +
-  `adapter`函数可以返回第二个值,此值会被用序号(返回结果键值)。例如`tx.foreach({'​1','​foobar','​3'​},​function(n,​i) return tonumber(n),​ tostring(i) end)`将会返回`{["​1"​]=1,​ ["​3"​]=3}`+