【发布时间】:2021-08-19 01:30:00
【问题描述】:
Roku 论坛上提供了这种差异。但我不明白。有谁知道这个区别及其属性吗?
【问题讨论】:
标签: roku brightscript
Roku 论坛上提供了这种差异。但我不明白。有谁知道这个区别及其属性吗?
【问题讨论】:
标签: roku brightscript
我会尽量简单解释:
“m”是关联数组的图像。 m.top 将是该关联数组的默认元素。 像这样的:
m = {top : "value for top element"}
所以现在您可以调用“m.top”并获取它的值。
每个 xml 组件在创建时都添加了自己的“m”。
通常 - Brightscript 中的“m.top”用于引用其中使用的 xml 组件。
这就是您可以这样做的原因: m.CustomComponent = m.top.findNode("CustomComponent")
这又会返回 m.top 的子组件(ID 为“自定义组件”)。
这还将创建一个变量 - m.CustomComponent 具有组件文件范围。
您还可以向 .xml 组件添加接口。 为了访问它,您将使用:m.top.nameOfInterface。
要创建具有接口值的组件范围的变量,您可以使用:
m.interfaceValue = m.top.nameOfInterface
简而言之: m.CustomComponent 或 m.interfaceValue 是具有组件范围的变量。 而“m”用于区分各种变量作用域。
m.top 是对它自己的组件的引用。
一般来说,这个概念对于数据范围很重要。 请检查此文件(尤其是在“组件范围”部分)以了解更多信息: https://developer.roku.com/en-gb/docs/developer-program/core-concepts/data-scoping.md
【讨论】:
让我们试着让它更简单。当您使用“m.something”时,意味着您正在引用“.brs”文件中定义的组件变量。当您使用“m.top.something”时,意味着您正在引用“.xml”文件中定义的组件或字段。 “m”就像java中的“this”指针。
【讨论】:
m.top 表示节点,也称为组件。
在brightscript中,你有普通的普通类(就像在任何编程语言中一样),但你也有“nodes”(又名“components” >")。
节点就像游戏引擎中的游戏对象。
“米。”无非就是“类”。所以如果你有三个变量 x, y, z 然后是 m.x, m.y, m.z。很简单。
但是 m.top。与“类”无关,它是组件。它包含与组件相关的所有内容 - 例如样式、大小、子组件等。
假设您在brightscript 中有一个“普通”类,它“只是一个类”而不是一个组件——所以“main.brs”就是一个例子。在这种情况下, m.top 是没有意义的。试试
?"check", Type(m.top)
在 main.brs 中。它只会崩溃或给出错误或警告。
相反,放
?"check", Type(m.top)
在任何组件中。你会看到它告诉你
check roSGNode
你可以写
m.x = 13
m.y = 14
没问题。这些是普通变量(字符串、整数等)。像使用任何语言一样将它们用作变量。 “米。”只是一种访问变量的方法。
但 m.top 与变量无关 - m.top 是一个组件。
如果你试试这个
m.top.x = 13
m.top.y = 14
它只会崩溃或给出错误或警告。
您可以向组件添加字段。 (这样做有点不寻常,通常它们只是在 xml 文件中设置。)例如
m.top.addFields({ unusualField: 13 })
然后你可以...
?"check", m.top.getField("unusualField")
它会打印出整数 13。
但是unusualField是一个字段,和变量无关。
{ 令人困惑的是,brightscript 在字段中添加了“点访问”糖。因此,要访问一个字段,您实际上可以将m.top.styles 写为m.top.getField("styles") 的简写。不幸的是,它们使用了与变量相同的分隔符,一个点。但请注意,它与变量无关。 m.top 是一个组件,它有字段。不涉及变量。 }
【讨论】: