6 votes

Existe-t-il un moyen plus lisible d'écrire for k, v in pairs(my_table) do ... end in lua si je n'utilise jamais k ?

Existe-t-il un moyen plus lisible d'écrire en Lua :

for k, v in pairs(my_table) do
    myfunction( v )
end 

Je n'utilise jamais k, donc j'aimerais le retirer du contrôle de la boucle, pour qu'il soit clair que je ne fais qu'itérer sur les valeurs. Existe-t-il une fonction comme pairs() qui me donne uniquement une liste de valeurs ?

10voto

prapin Points 2475

Il n'existe pas de fonction standard qui ne fait qu'itérer des valeurs, mais on peut peut Vous pouvez l'écrire vous-même si vous le souhaitez. Voici un tel itérateur :

function values(t)
  local k, v
  return function()
    k, v = next(t, k)
    return v
  end
end

Mais normalement, les gens utilisent simplement pairs et de rejeter la première variable. Il est d'usage dans ce cas de nommer la variable inutilisée _ (un trait de soulignement) pour indiquer clairement l'intention.

5voto

ZERO Points 306

J'ai vu des gens utiliser le _ au lieu de k ou i.

1voto

Mike Corcoran Points 5842

Pourquoi utiliser la fonction pairs() si vous ne voulez pas les paires clé/valeur de la table que vous énumérez ?

par exemple, c'est encore plus court à taper :

local t = {"asdf", "sdfg", "dfgh"}

for i=1, #t do
    print(t[i])
end

Sinon, j'ai toujours fait ça :

local t = {"asdf", "sdfg", "dfgh"}

for _,v in pairs(t) do
    print(v)
end

edit : pour votre scénario, où vous voulez énumérer seulement les valeurs dans une table avec des clés non numériques, probablement la chose la plus claire que vous pourriez faire serait d'écrire votre propre fonction d'itérateur de table comme ceci :

local t = {["asdf"] = 1, ["sdfg"] = 2, ["dfgh"] = 3}

function values(tbl)
    local key = nil
    return function()
            key = next(tbl, key)
            return tbl[key]
           end
end

for value in values(t) do
    print(value)
end

alors, il est très explicite que vous ne parcourez que les valeurs de la table t. Comme pairs(), il n'est pas garanti de parcourir dans l'ordre puisqu'il utilise next().

0voto

Nathan Points 420

C'est votre style de codage, vraiment. Si vous pouvez le lire et que vous êtes cohérent avec lui, cela ne devrait pas avoir d'importance.

Cependant, j'ai tendance à utiliser : for i,c in "i" pour "index" et "c" pour "enfant", mais "v" pour "valeur" fonctionne également. Et même si vous n'utilisez pas la variable index, c'est toujours une bonne pratique.

Une autre chose que vous pourriez faire est : for n = 1, 10 lorsqu'il s'agit de chiffres. Mais une fois encore, c'est votre style de codage et tant qu'il est cohérent, tout devrait bien se passer.

0voto

ks1322 Points 9238

De Guide de style Lua :

The variable consisting of only an underscore "_" is commonly used as a placeholder when you want to ignore the variable:

for _,v in ipairs(t) do print(v) end
Note: This resembles the use of "_" in Haskell, Erlang, Ocaml, and Prolog languages, where "_" takes the special meaning of anonymous (ignored) variables in pattern matches. In Lua, "_" is only a convention with no inherent special meaning though. Semantic editors that normally flag unused variables may avoid doing so for variables named "_" (e.g. LuaInspect is such a case).

Je m'attendrais donc à ce que le soulignement ( _ ) est plus lisible pour les variables inutilisées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X