API/component/zh: Difference between revisions

From OpenComputers: Rebooted
Jump to navigation Jump to search
imported>OCDoc Import
Imported from legacy OpenComputers documentation at ocdoc.cil.li
 
Clean up Markdown artifacts from DokuWiki migration
 
Line 3: Line 3:
component(组件) API可用于访问电脑中的组件并与其交互。读者还可查看[[Component/component access/zh|有关访问组件的页面]]。
component(组件) API可用于访问电脑中的组件并与其交互。读者还可查看[[Component/component access/zh|有关访问组件的页面]]。


* `component.doc(address:string, method:string): string`
* <code>component.doc(address:string, method:string): string</code>


<pre>返回指定组件中指定方法的对应文档字符串(若存在)。请注意,你也可以对代理对象的方法使用`tostring`来获取此字符串。例如`tostring(component.screen.isOn)`。
<pre>返回指定组件中指定方法的对应文档字符串(若存在)。请注意,你也可以对代理对象的方法使用tostring来获取此字符串。例如tostring(component.screen.isOn)。
</pre>
</pre>


* `component.invoke(address:string, method:string[, ...]): ...`
* <code>component.invoke(address:string, method:string[, ...]): ...</code>


<pre>调用指定组件的指定方法,将其余参数传递给此方法作为其参数。返回方法调用的结果,即方法的返回值。调用时可能会抛出异常,依被调用方法的实现而异。
<pre>调用指定组件的指定方法,将其余参数传递给此方法作为其参数。返回方法调用的结果,即方法的返回值。调用时可能会抛出异常,依被调用方法的实现而异。
</pre>
</pre>


* `component.list([filter:string[, exact:boolean]]):function`
* <code>component.list([filter:string[, exact:boolean]]):function</code>


<pre>返回一个表,其中列出当前所有连接到电脑的组件,表中以组件地址为键并以组件类型为值。此方法还通过`__call`提供了迭代器语法,所以你还可以这样调用:`for address, componentType in component.list() do ... end` 
<pre>返回一个表,其中列出当前所有连接到电脑的组件,表中以组件地址为键并以组件类型为值。此方法还通过__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。
</pre>
</pre>


* `component.methods(address:string):table`
* <code>component.methods(address:string):table</code>


<pre>返回一张表,其中包含指定组件提供的所有方法名。表中的键为方法名,而表中的值代表了此方法是否为直接调用。
<pre>返回一张表,其中包含指定组件提供的所有方法名。表中的键为方法名,而表中的值代表了此方法是否为直接调用。
</pre>
</pre>


* `component.proxy(address:string):table`
* <code>component.proxy(address:string):table</code>


<pre>获取某组件的“proxy”对象(代理对象),代理对象将组件提供的所有方法以字段的形式给出,因此可以更直接地调用它们(无需通过`invoke`)。这也是用来生成各个组件类型的“首选组件”的方法,也即你通过`component.某某`(“某某”为组件类型)方法得到的东西。 
<pre>获取某组件的“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与组件的地址。
</pre>
</pre>


* `component.type(address:string):string`
* <code>component.type(address:string):string</code>


<pre>获取指定组件的类型。
<pre>获取指定组件的类型。
</pre>
</pre>


* `component.slot(address:string):string`
* <code>component.slot(address:string):string</code>


<pre>返回安装组件的插槽编号。若无意义则返回-1。
<pre>返回安装组件的插槽编号。若无意义则返回-1。
</pre>
</pre>


* `component.fields(address:string):string`
* <code>component.fields(address:string):string</code>


<pre>未记录
<pre>未记录
</pre>
</pre>


* `component.get(address: string[, componentType: string]): string | (nil, string)`
* <code>component.get(address: string[, componentType: string]): string | (nil, string)</code>


<pre>尝试将简写地址(部分地址)解析为完整地址。成功时返回完整地址,失败时返回`nil`和一条报错信息。可选是否通过组件类型进行筛选。 
<pre>尝试将简写地址(部分地址)解析为完整地址。成功时返回完整地址,失败时返回nil和一条报错信息。可选是否通过组件类型进行筛选。
</pre>
</pre>


* `component.isAvailable(componentType: string): boolean`
* <code>component.isAvailable(componentType: string): boolean</code>


<pre>检查指定的组件类型是否存在首选组件。
<pre>检查指定的组件类型是否存在首选组件。
</pre>
</pre>


* `component.getPrimary(componentType: string): table`
* <code>component.getPrimary(componentType: string): table</code>


<pre>获取指定类型组件的首选组件的代理对象。如果指定类型无首选组件则抛出异常。
<pre>获取指定类型组件的首选组件的代理对象。如果指定类型无首选组件则抛出异常。
</pre>
</pre>


* `component.setPrimary(componentType: string, address: string)`
* <code>component.setPrimary(componentType: string, address: string)</code>


<pre>为指定组件类型设定一个新的首选组件。地址可以为简写地址,但必须合法,否则应当为`nil`。将其设定为`nil`和新值时分别会触发`component_unavailable`和`component_available`信号。 
<pre>为指定组件类型设定一个新的首选组件。地址可以为简写地址,但必须合法,否则应当为nil。将其设定为nil和新值时分别会触发component_unavailable和component_available信号。
</pre>
</pre>


请注意component API有一个元表,支持以下语法:
请注意component API有一个元表,支持以下语法:


```lua local component = require("component") local rs0 = component.getPrimary("redstone") local rs1 = component.redstone --语法糖 print(rs0 == rs1) --输出值为true ```
<syntaxhighlight lang="lua">
local component = require("component") local rs0 = component.getPrimary("redstone") local rs1 = component.redstone --语法糖 print(rs0 == rs1) --输出值为true
</syntaxhighlight>


== 目录 ==
== 目录 ==


{{:API/contents/zh}}
{{:API/contents/zh}}

Latest revision as of 20:26, 24 August 2026

Component(组件) API

component(组件) API可用于访问电脑中的组件并与其交互。读者还可查看有关访问组件的页面。

  • component.doc(address:string, method:string): string
返回指定组件中指定方法的对应文档字符串(若存在)。请注意,你也可以对代理对象的方法使用tostring来获取此字符串。例如tostring(component.screen.isOn)。
  • component.invoke(address:string, method:string[, ...]): ...
调用指定组件的指定方法,将其余参数传递给此方法作为其参数。返回方法调用的结果,即方法的返回值。调用时可能会抛出异常,依被调用方法的实现而异。
  • component.list([filter:string[, exact:boolean]]):function
返回一个表,其中列出当前所有连接到电脑的组件,表中以组件地址为键并以组件类型为值。此方法还通过__call提供了迭代器语法,所以你还可以这样调用:for address, componentType in component.list() do ... end
若设置了filter(过滤器),则此方法只会返回包含过滤器字符串(**并非**模式字符串/正则表达式)的组件。例如,component.list("red")将会返回redstone组件的结果。
如果将true作为第二个参数传递,则执行精确匹配。例如red在此情况下**不会**匹配redstone。
  • component.methods(address:string):table
返回一张表,其中包含指定组件提供的所有方法名。表中的键为方法名,而表中的值代表了此方法是否为直接调用。
  • component.proxy(address:string):table
获取某组件的“proxy”对象(代理对象),代理对象将组件提供的所有方法以字段的形式给出,因此可以更直接地调用它们(无需通过invoke)。这也是用来生成各个组件类型的“首选组件”的方法,也即你通过component.某某(“某某”为组件类型)方法得到的东西。
例如,你可以这样使用此方法:component.proxy(component.list("redstone")()).getInput(sides.north),这段代码会为你获取component.list迭代器返回的第一个redstone组件的代理对象,然后调用它的getInput方法。
请注意代理对象无论如何都至少有两个字段:一是type与组件的类型名,二是address与组件的地址。
  • component.type(address:string):string
获取指定组件的类型。
  • component.slot(address:string):string
返回安装组件的插槽编号。若无意义则返回-1。
  • component.fields(address:string):string
未记录
  • component.get(address: string[, componentType: string]): string | (nil, string)
尝试将简写地址(部分地址)解析为完整地址。成功时返回完整地址,失败时返回nil和一条报错信息。可选是否通过组件类型进行筛选。
  • component.isAvailable(componentType: string): boolean
检查指定的组件类型是否存在首选组件。
  • component.getPrimary(componentType: string): table
获取指定类型组件的首选组件的代理对象。如果指定类型无首选组件则抛出异常。
  • component.setPrimary(componentType: string, address: string)
为指定组件类型设定一个新的首选组件。地址可以为简写地址,但必须合法,否则应当为nil。将其设定为nil和新值时分别会触发component_unavailable和component_available信号。

请注意component API有一个元表,支持以下语法:

local component = require("component") local rs0 = component.getPrimary("redstone") local rs1 = component.redstone --语法糖 print(rs0 == rs1) --输出值为true

目录

< 100% 15% 15% >
API OpenOS buffer - colors - component - computer - event - filesystem - uuid - internet - keyboard - note - process - rc - robot - serialization - shell - sides - term - text - thread - transforms - unicode
::: Lua 库 coroutine - package - io - os