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
Last revision Both sides next revision
api:component:zh [2023/10/17 10:21]
hfsr [Component API]
api:component:zh [2023/11/03 20:26]
hfsr [Component(组件) API]
Line 1: Line 1:
 Component(组件) API Component(组件) API
 ============= =============
-component(组件) API可用于访问电脑中的组件并与其交互。读者还可查看[[:​component:​component_access:​zh|有关组件交互的页面]]。+component(组件) API可用于访问电脑中的组件并与其交互。读者还可查看[[:​component:​component_access:​zh|有关访问组件的页面]]。
  
 - `component.doc(address:​string,​ method:​string):​ string`  ​ - `component.doc(address:​string,​ method:​string):​ string`  ​
-  返回指定地址的组件中指定名称的方法对应的文档字符串(如果存在)。请注意你也可以对代理对象(proxy)的方法使用`tostring`来获取此字符串。例如`tostring(component.screen.isOn)`.+  返回指定地址的组件中指定名称的方法对应的文档字符串(如果存在)。请注意你也可以对代理对象(proxy)的方法使用`tostring`来获取此字符串。例如`tostring(component.screen.isOn)`。   
 +  \\
 - `component.invoke(address:​string,​ method:​string[,​ ...]): ...`  ​ - `component.invoke(address:​string,​ method:​string[,​ ...]): ...`  ​
-  调用指定地址的组件中指定名称的方法,将其余参数传递给此方法作为其参数。返回方法调用的结果,即方法的返回值。调用时可能会抛出异常,依被调用方法的实现而异。+  调用指定地址的组件中指定名称的方法,将其余参数传递给此方法作为其参数。返回方法调用的结果,即方法的返回值。调用时可能会抛出异常,依被调用方法的实现而异。 ​  
 +  \\
 - `component.list([filter:​string[,​ exact:​boolean]]):​function`  ​ - `component.list([filter:​string[,​ exact:​boolean]]):​function`  ​
   返回一个表,其中列出当前所有连接到电脑的组件,表中以组件地址为键并以组件类型为值。此方法还通过`__call`提供了迭代器语法,所以你还可以这样调用:`for address, componentType in component.list() do ... end`  ​   返回一个表,其中列出当前所有连接到电脑的组件,表中以组件地址为键并以组件类型为值。此方法还通过`__call`提供了迭代器语法,所以你还可以这样调用:`for address, componentType in component.list() do ... end`  ​
   若设置了`filter`(过滤器),则此方法只会返回包含过滤器字符串的组件(*并非*模式字符串/​正则表达式)。例如,`component.list("​red"​)`将会返回`redstone`组件的结果。 ​   若设置了`filter`(过滤器),则此方法只会返回包含过滤器字符串的组件(*并非*模式字符串/​正则表达式)。例如,`component.list("​red"​)`将会返回`redstone`组件的结果。 ​
-  如果将`true`作为第二个参数传递,则执行精确匹配。例如`red`在此情况下*不会*匹配`redstone`。+  如果将`true`作为第二个参数传递,则执行精确匹配。例如`red`在此情况下*不会*匹配`redstone`。 ​  
 +  \\
 - `component.methods(address:​string):​table`  ​ - `component.methods(address:​string):​table`  ​
-  返回一张表,其中包含指定地址的组件提供的所有方法名。表中的键为方法名,而表中的值代表了此方法是否为直接调用。+  返回一张表,其中包含指定地址的组件提供的所有方法名。表中的键为方法名,而表中的值代表了此方法是否为直接调用。 ​  
 +  \\
 - `component.proxy(address:​string):​table`  ​ - `component.proxy(address:​string):​table`  ​
-  获取某组件的'​proxy'​对象(代理对象),代理对象将组件提供的所有方法以键值对的形式给出,因此可以更直接地调用它们(无需通过`invoke`)。这也是用来生成各个组件类型的“首选组件”的方法,也即你通过`component.某某`(某某为组件类型)方法得到的东西。+  获取某组件的'​proxy'​对象(代理对象),代理对象将组件提供的所有方法以字段(键值对的形式给出,因此可以更直接地调用它们(无需通过`invoke`)。这也是用来生成各个组件类型的“首选组件”的方法,也即你通过`component.某某`(某某为组件类型)方法得到的东西。
   例如,你可以这样使用此方法:`component.proxy(component.list("​redstone"​)()).getInput(sides.north)`,这段代码会为你获取`component.list`迭代器返回的第一个`redstone`组件的代理对象,然后调用它的`getInput`方法。   例如,你可以这样使用此方法:`component.proxy(component.list("​redstone"​)()).getInput(sides.north)`,这段代码会为你获取`component.list`迭代器返回的第一个`redstone`组件的代理对象,然后调用它的`getInput`方法。
-  请注意代理对象无论如何都至少有两个键值对:一是`type`与组件的类型名,二是`address`与组件的地址。+  请注意代理对象无论如何都至少有两个字段:一是`type`与组件的类型名,二是`address`与组件的地址。 ​  
 +  \\
 - `component.type(address:​string):​string`  ​ - `component.type(address:​string):​string`  ​
-  获取指定地址的组件的类型。+  获取指定地址的组件的类型。 ​  
 +  \\
 - `component.slot(address:​string):​string`  ​ - `component.slot(address:​string):​string`  ​
-  返回安装组件的插槽编号。如果无意义则返回-1。+  返回安装组件的插槽编号。如果无意义则返回-1。 ​  
 +  \\
 - `component.fields(address:​string):​string`  ​ - `component.fields(address:​string):​string`  ​
-  未记录(译者注:有空去游戏里试一下)+  未记录(译者注:有空去游戏里试一下) ​  
 +  \\
 - `component.get(address:​ string[, componentType:​ string]): string | (nil, string)`  ​ - `component.get(address:​ string[, componentType:​ string]): string | (nil, string)`  ​
-  尝试将简写地址(部分地址)解析为完整地址。成功时返回完整地址,失败时返回`nil`和一条报错信息。可选是否通过组件类型进行筛选。+  尝试将简写地址(部分地址)解析为完整地址。成功时返回完整地址,失败时返回`nil`和一条报错信息。可选是否通过组件类型进行筛选。 ​  
 +  \\
 - `component.isAvailable(componentType:​ string): boolean`  ​ - `component.isAvailable(componentType:​ string): boolean`  ​
-  检查指定组件类型是否存在首选组件。+  检查指定组件类型是否存在首选组件。 ​  
 +  \\
 - `component.getPrimary(componentType:​ string): table`  ​ - `component.getPrimary(componentType:​ string): table`  ​
-  获取指定类型的首要组件的代理对象。如果指定类型无首选组件则抛出异常。+  获取指定类型的首要组件的代理对象。如果指定类型无首选组件则抛出异常。 ​  
 +  \\
 - `component.setPrimary(componentType:​ string, address: string)`  ​ - `component.setPrimary(componentType:​ string, address: string)`  ​
-  为指定组件类型设定一个新的首选组件。地址可以为简写地址,但必须合法,否则应当为`nil`。将其设定为`nil`或新值时分别会触发`component_unavailable`和`component_available`信号。 +  为指定组件类型设定一个新的首选组件。地址可以为简写地址,但必须合法,否则应当为`nil`。将其设定为`nil`或新值时分别会触发`component_unavailable`和`component_available`信号。 ​  
-  ​+  ​\\
 请注意component API有一个元表,支持以下语法: 请注意component API有一个元表,支持以下语法:
  
Line 37: Line 48:
 local component = require("​component"​) local component = require("​component"​)
 local rs0 = component.getPrimary("​redstone"​) local rs0 = component.getPrimary("​redstone"​)
-local rs1 = component.redstone -- 语法糖 +local rs1 = component.redstone --语法糖 
-print(rs0 == rs1) -- 输出值为true+print(rs0 == rs1) --输出值为true
 ``` ```