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



roku/brightscript开发的新范围那种方法?

main.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.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

当它登陆Main Controller的第16行时,我得到了:

在Brightscript组件或接口中找不到的成员函数。 (运行时错误& hf4)在 pkg:/components/maincontroller.brs(16)

这只是对不能/不能做什么的一般测试,因此请不要评论这是否是"好练习"。我只想知道是否有可能,如果是这样,我在这里缺少什么?感谢您的任何帮助

you can 具有roAssociativeArray值的函数。实际上,这就是在Brightscript中完成OO方法的方式。

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

您可以看到RSG支持的字段类型列表https://sdkdocs.roku.com/pages/pages/viewpage.action?pageid=1608549

是的,它确实说是支持assocarray和(最近)array-但有一个警告!当您在线程之间分配(或什至访问)复合对象时,只需进行深层复制,并且只有"受支持的"类型可以通过 - 随着您的经验,function不是其中之一。目前,所有未识别的数据都静静下降,甚至没有警告的耳语 - 因此买家要当心。

请参阅https://forums.roku.com/viewtopic.php?f=34&t=96955&p=541965#p541965有关更多信息。邀请您在Roku的开发人员论坛中添加您的声音,要求RSG支持功能类型 - 如果足够的人抱怨,他们倾向于聆听。

您无法在节点字段中传递功能。仅数据。如果您在设置后立即检查m.global.mainMethods.getName值,它将无效。

我认为您可以使用匿名函数进行此操作。

https://developer.roku.com/en-gb/docs/references/brightscript/language/language/program-statement.md#anonymous-functions

q = { 
    starring : Function(o, e)
        str = e.GetBody()
        print "Starring: " + str 
        toks = box(str).tokenize(",")
        For Each act In tok
            actx = box(act).trim()
            If actx <> "" Then
                print "Actor: [" + actx + "]"
                o.Actors.Push(actx)
            End If
        End For
        Return 0
    End Function 
} 
q.starring(myobj, myxml)

相关内容

  • 没有找到相关文章

最新更新