2010-12-04 54 views
1
if #subWords>0 then 
print("Q3") 
for a,b in pairs(subWords) do 
table.insert(output,b) 
print("Q2: Adding "..b) 
end 
end 

---- DéfinitionsInfini "pour i, v dans les paires (tableau) faire" Boucle?

--subWords est une table à quatre cordes en elle

--output est une table, avec des chaînes en elle

--- -Goal

--Pour fusionner les tables "sortie" et "sous-mots"

---- Sortie

impressions --Repeatedly "Q2: Ajout (mot)" (après d'autres choses)

--Crashes ROBLOX

Toutes les idées?

+0

'output' et' subWords' sont certainement des tables différentes, non? – Phrogz

+0

Oui. Et j'ai également corrigé le problème de plantage, mais il est toujours une boucle infinie :( – forbes

Répondre

2

Voir commentaire Phrogz: les sous-mots et la sortie sont la même table.

Notez que dans Lua, les valeurs des tables sont références, donc:

t1 = {} 
t2 = t1 
t3 = t2 
t4 = t3 

// all four of these variables refer to the *same* table 

print(t4.food) -- nil 
t1.food = "donut" 
print(t4.food) -- donut 

Qu'est-ce qui se passe avec votre code est que subWords et output font référence à la même table. Lorsque vous faites défiler les éléments de cette table, vous ajoutez nouveaux éléments à, de sorte que la boucle ne sera jamais exécutée. Je sais que vous avez dit que ce n'est pas le cas, mais c'est la seule chose qui pourrait produire ces symptômes. Essayez output = {} avant la boucle et vous verrez le problème disparaît. Ou vous pouvez assert(output ~= subWords) ou print(output, subWords) pour voir qu'ils sont identiques, mais je ne sais pas comment Roblox gère ces fonctions (il peut ne pas avoir une console de sortie et/ou il peut piéger les erreurs).

+0

Merci pour l'aide.impression (sortie, sous-mots) était une excellente suggestion, car je n'aurais jamais cru que les tables étaient les mêmes :) Je J'ai oublié la table de sortie n'était pas locale et je l'ai réécrit dans la ligne avant ... Merci encore! – forbes

+0

Frappaient ma tête contre mon bureau avec un problème similaire. Je vous remercie! Dans ce cas, il s'agissait de mettre à jour certaines structures internes à utiliser avec une application IUP. – spirulence

1

Les odeurs comme les sous-mots et la sortie sont la même table. Et en traversant les tables, ne jamais ajouter des valeurs aux tables étant traversèrent, comme indiqué dans le Manuel Lua Référence:

[snip]

Le comportement suivant est indéfini si, au cours de la traversée, vous assignez toute valeur à un champ inexistant dans la table . Vous pouvez cependant modifier les champs existants. En particulier, vous pouvez effacer champs existants.

[snip]

Et pairs() utilise en interne à côté.