gpt4 book ai didi

roku - 是否可以将匿名函数分配给全局关联数组属性?

转载 作者:行者123 更新时间:2023-12-03 02:20:01 25 4
gpt4 key购买 nike

roku/brightscript 开发新手:是否可以将一个对象添加到全局关联数组(所有组件均可访问),该对象具有定义为属性之一的方法,并调用该方法?

主.brs:

function Main()
init()
end function

function init()
screen = createObject("roSGScreen")
m.port = createObject("roMessagePort")
screen.SetMessagePort(m.port)

scene = screen.CreateScene("MainController")
screen.show()

o = {
getName: function() as string
return "John"
end function
}

setUpGlobal(screen)
m.global.addFields({mainMethods: o})

while(true)
msg = wait(0, m.port)
msgType = type(msg)

if msgType = "roSGScreenEvent"
if msg.isScreenClosed() then exit while
end if
end while
end function

function setUpGlobal(p_screen as Object)
m.global = p_screen.getGlobalNode()
m.global.id = "GlobalNode"
end function

..然后在另一个 MainController 中,运行任务并返回数据后...

MainController.brs

function init()
loadConfig()
end function


function loadConfig()
m.config = createObject("roSGNode", "Configurator")
m.config.observeField("done", "onConfigLoaded")
m.config.observeField("fail", "onConfigError")
end function


function onConfigLoaded()
print "config loaded: " + m.global.mainMethods.getName()
end function


function onConfigError()
print "config failed to loaded"
end function

当它到达 MainController 的第 16 行时,我得到:

Member function not found in BrightScript Component or interface. (runtime error &hf4) in pkg:/components/MainController.brs(16)

这只是对可以/不可以做什么的一般测试,因此请不要评论这是否是“良好实践”。我只是想知道这是否可能,如果可以,我在这里错过了什么?感谢您的帮助

最佳答案

可以将函数作为roAssociativeArray值。事实上,这就是 BrightScript 中 OO 方法的实现方式。

但是,您不能将函数分配给 Roku 场景图对象(roSgNode 派生类)的字段!直接或间接(嵌套)。这是(当前?!)实现的限制。

您可以在此处查看 RSG 支持的字段类型列表 https://sdkdocs.roku.com/pages/viewpage.action?pageId=1608549

是的,它确实说支持 assocarray 和(最近)array - 但有一个警告!当您在线程之间分配(甚至访问)复合对象时,会进行深层复制,并且只有“受支持”的类型才能通过 - 正如您所经历的,function 不是其中之一。目前,所有无法识别的数据都会被悄悄丢弃,甚至不会发出任何警告 - 所以买家要小心。

参见https://forums.roku.com/viewtopic.php?f=34&t=96955&p=541965#p541965了解更多。欢迎在 Roku 开发者论坛中发表您的意见,请求 RSG 支持功能类型 - 如果有足够多的人提示,他们往往会倾听。

关于roku - 是否可以将匿名函数分配给全局关联数组属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41252735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com