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 是一个组件,它有字段。不涉及变量。 }
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 是一个组件,它有字段。不涉及变量。 }