我试图在一个函数中填充一个表,然后使用它在以后的调用中收到的值,在使用它之后删除每个值。由于某些原因,这些值在函数调用之间并不存在。当调用subscribeToService()
,然后在unsubscribeToService()
中减少时,应该填充容纳手柄的表格。在Lua函数中填充表不会反映到外部
local subscriptionSignals_AudioMixerManager = {"volumeLevel", "muteStatus", "fadeLevel", "balanceLevel", "bassLevel", "trebleLevel", "midLevel", "AVCLevel", "activeAudioSrc", "interruptSrc"}
local signalHandlers_AudioMixerManager = {["volumeLevel"] = OnSignal, ["muteStatus"] = OnSignal, ["fadeLevel"] = onSignal, ["balanceLevel"] = OnSignal, ["bassLevel"] = OnSignal, ["trebleLevel"] = OnSignal, ["midLevel"] = OnSignal, ["AVCLevel"] = OnSignal, ["activeAudioSrc"] = OnSignal, ["interruptSrc"] = OnSignal}
local subscriptionHandles_AudioMixerManager = {}
local subscriptionSignals_AudioManager = {"targetSource"}
local signalHandlers_AudioManager = {["targetSource"] = onAudioSourceChange}
local subscriptionHandles_AudioManager = {}
local function subscribeToService(objectPath, signalNames, signalHandlers, subscriptionHandles)
print("Subscribing...")
for i,v in ipairs(signalNames) do
subscriptionHandles[v] = service.subscribe(objectPath, v, signalHandlers[v]);
print(v .. " handle: ")
print(subscriptionHandles[v])
end
print("Done subscribing")
end
local function unsubscribeFromService(subscriptionHandles)
print("Unsubscribing...")
for i,v in ipairs(subscriptionHandles) do
print("Entered for loop")
service.unsubscribe(v)
print(v)
subscriptionHandles[i] = nil
end
print("Done unsubscribing")
end
local function subscribe()
subscribeToService(AudioMixerManager, subscriptionSignals_AudioMixerManager, signalHandlers_AudioMixerManager, subscriptionHandles_AudioMixerManager)
subscribeToService(AudioManager, subscriptionSignals_AudioManager, signalHandlers_AudioManager, subscriptionHandles_AudioManager)
local result, error = service.invoke(AudioMixerManager, "registerMuteClient", {serviceName="audioSettings-interrupt"})
muteClientID = result.id
result, error = service.invoke(AudioMixerManager, "registerMuteClient", {serviceName="audioSettings-modechange"})
muteClientID2 = result.id
end
local function unsubscribe()
unsubscribeFromService(subscriptionHandles_AudioMixerManager);
unsubscribeFromService(subscriptionHandles_AudioManager);
end
我得到时subscribe()
被称为以下的输出,再后来unsubscribe()
Subscribing...
volumeLevel handle:
userdata: 18f418
muteStatus handle:
userdata: 18f490
fadeLevel handle:
userdata: 18f508
balanceLevel handle:
userdata: 18f580
bassLevel handle:
userdata: 18f5f8
trebleLevel handle:
userdata: 18f670
midLevel handle:
userdata: 18f6e8
AVCLevel handle:
userdata: 18f760
activeAudioSrc handle:
userdata: 18f7d8
interruptSrc handle:
userdata: 18f850
Done subscribing
Subscribing...
targetSource handle:
userdata: 18f8c8
Done subscribing
Unsubscribing...
Done unsubscribing
Unsubscribing...
Done unsubscribing
它看起来像它甚至没有在unsubscribeFromService()
我相信在进入for循环意味着表它被传递由于某种原因是空的。在Lua中是否曾经有过一个表不能通过引用传递的情况?它可以解释这种行为,因为我分解了较小的组件并单独测试它们,并且它们似乎正在工作。
谢谢!我刚才在回来之前就明白了。 – user1510964
@ user1510964:如果你真的想要感谢他,你可以点击旁边的绿色复选标记来接受他的答案。 –