brightscript 中 m 和 m.top 的区别?

Difference Between m and m.top in brightscript?

Roku 论坛上提供了此差异。但是我没看懂。有谁知道这个区别和它的属性吗?

我会尽量简单的解释一下:

图像"m"是关联数组。 m.top 将是该关联数组的默认元素。 像这样:

m = {top : "value for top element"}

所以现在您可以调用 "m.top" 并获取它的值。

每个 xml 组件在创建时都添加了自己的 "m"。

通常 - Brightscript 中的 "m.top" 用于引用其中使用的 xml 组件。

这就是您可以这样做的原因: m.CustomComponent = m.top.findNode("CustomComponent")

这又将 return m.top 的子组件(ID "Custom Component")。

这还将创建一个具有组件文件范围的变量 - m.CustomComponent。

您还可以向 .xml 组件添加接口。 为了访问它,您将使用:m.top.nameOfInterface.

要创建具有接口值的组件范围的变量,您可以使用:

m.interfaceValue = m.top.nameOfInterface

简而言之: m.CustomComponent 或 m.interfaceValue 是具有组件作用域的变量。 而"m"用来区分各种变量作用域。

m.top 是对它自己的组件的引用。

一般来说,这个概念对于数据范围界定很重要。 请检查此文件(尤其是 "Component scope" 部分)以了解更多信息: 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 中,你有普通的旧普通 classes(就像在任何编程语言中一样)但你也有“nodes”(又名“组件”)。

节点就像游戏引擎中的游戏对象。

“米”。无非就是“class”。因此,如果您有三个变量 x、y、z,则 m.x、m.y、m.z。简单。

但是m.top。与“class”无关,它是组件。它包含与组件相关的所有内容 - 例如样式、大小、子组件等。

假设您在 brightscript 中有一个“普通”class,它“只是一个 class”而不是一个组件 - 所以“main.brs”就是一个例子。在那种情况下,m.top 是没有意义的。尝试

?"check", Type(m.top)

在main.brs。它只会崩溃或给出错误或警告。

相比之下,把

?"check", Type(m.top)

在任何组件中。你会看到它告诉你

check         roSGNode

召回m.top与变量无关:

你可以写

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 写成 shorthand for m.top.getField("styles") 不幸的是,他们使用与变量相同的分隔符,一个点。但请注意它与变量无关。 m.top 是一个组件,它有字段。不涉及变量。 }