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