2017-07-22 1 views
1

J'essaie d'importer des nombres de fichiers et de les changer s'ils sont à une certaine valeur. J'utilise la torche pour obtenir les valeurs gesture et les changer de 101 à 10 ou de 100 à 9 si l'entrée est le nombre correspondant (10 ou 9). Malheureusement, j'ai découvert que dans Lua, l'entrée est de type userdata qui ne peut pas être convertie en entiers et non comparée à des entiers ou des tenseurs de torches. Donc, ma question est: Comment puis-je vérifier l'égalité des nombres si le type d'entrée est userdata?Lua: Lire userdata sous forme de nombre/Comparer les données d'utilisateur avec le numéro

Existe-t-il un moyen de convertir l'entrée en un nombre tel que la comparaison est possible?

gesture = matio.load(val, 'gesture') 

print(type(gesture)) --prints `userdata` 
print(gesture)  --prints 10 (for example) 
if gesture == th.FloatTensor({101}) then 
    gesture = th.FloatTensor({10}) 
    print("101 Detected! New value is: ") 
    print(gesture) 
    os.exit(0) 
elseif gesture == th.FloatTensor({100}) then 
    gesture = th.FloatTensor({9}) 
    print("100 Detected! New value is: ") 
    print(gesture) 
    os.exit(0) 
end 
+0

Vraisemblablement, cette userdata a des fonctions membres, n'est-ce pas? L'un de ces membres ne génère-t-il pas d'entier? –

+0

@NicolBolas merci beaucoup pour le commentaire rapide! :) J'ai cherché des fonctions de membre 'lua userdata' avant mais je n'ai rien vu d'utile ... un lien auquel vous pouvez me référer? – DaveTheAl

+0

Vous vous méprenez. Ces données d'utilisateur provenaient de certaines API C. Vous devriez regarder la documentation de cette API pour apprendre comment utiliser ces données d'utilisateur. Il n'y a pas d'API unique pour les données utilisateur. Chaque API C expose différentes fonctions pour leurs différents objets userdata. –

Répondre

1

Cette question est assez complexe et après avoir testé par la dure, je l'ai trouvé un moyen de comparer le nombre userdata avec un entier.

print(type(gesture)) -> prints `userdata` 
print(gesture) -> 10 
gesture_str = tostring(gesture) 
print(type(gesture_str)) -> prints `string` 
gesture_int = tonumber(gesture_str) 
print(type(gesture_int)) -> prints `number` 

solution Une seule ligne est la suivante

gesture_int = tonumber(tostring(gesture)) 

Cette nouvelle variable stocke le nombre userdata comme un entier.