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_unavailablecomponent_available信号。

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

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

目录