[Ruby] concaténation variable + string

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour à tous, Je cherche le moyen de concaténer deux variable et un string, et j’avoue (le manque d’habitude de ce langage n’aidant pas) ne pas trouver la solution :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
dir_frame=UI.savepanel"Selectionner le dossier et le fichier", "" , "angle_"
    if (dir_frame)
      puts dir_frame  
    else
      puts "Operation annulee."
      exit
    end
...
degre=10
degre.times{|i|
   frame= ( dir_frame + i + ".png")
}

Le but est de me retrouver dans puts une chaîne ressemblant à ça :

1
c:\\repertoire\angle_0.png , c:\\repertoire\angle_1.png .....c:\\repertoire\angle_9.png

Sauf que visiblement la ligne 11 fait planter mon script (vu que si je la commente, le script poursuit son chemin.

Quelqu’un connait-il la bonne concaténation ?

Merci par avance !

Vous m’avez reproché de penser que j’avais toujours raison. Et je me suis rendu compte que vous aviez raison…. Mais allez savoir si j’ai raison !

+0 -0

Salut,

Le mieux reste l’interpolation.

1
frame = "#{dir_frame}#{i}.png"

PS : en Ruby, on privilégie une indentation de deux espaces.

Édité par Karnaj

Assez des salamis, je passe au jambon — Je fais un carnage si ce car nage car je nage, moi, Karnaj ! — Le comble pour un professeur de mathématique ? Mourir dans l’exercice de ses fonctions.

+4 -0

Une autre solution (qui ne vaut sans doute pas l’interpolation à l’exécution) : frame = [dir_frame, i, '.png'].join qui est potentiellement plus lisible (mais tout le monde n’a pas les mêmes goûts ;))

Édité par vibrice

+1 -0

Je commence le langage crystal, et comme ça ressemble beaucoup à la syntaxe ruby, je me dis que cette fonction ci-dessous devrait passer.

1
2
3
4
5
def st(*args)
  str_array = args.map {|e| e.to_s}.join("")
end

puts st("test", 1, ".jpg") # test1.jpg

Bien ou pas, je n’ai pas assez de recul pour ça…

EDIT: En regardant ci-dessus, pourquoi s’embêter ?

1
2
3
4
5
def st(*args)
  str_array = args.join("")
end

puts st("test", 1, ".jpg") # test1.jpg

Édité par fred1599

+0 -2

C’est hors sujet fred1599,

Mais pour répondre, pour ceux que ça intéresse, nous pouvons effectivement faire la même chose en Crystal, qui lui aussi à un typage fort : puts "test#{1}.jpg"

puts "test" + 1.to_s + ".jpg"

puts ["test", 1, ".jpg"].join("")

Travaillera sans problème.

Le test peux se faire ici :

https://play.crystal-lang.org/#/cr

Le choix proposé par « Karnaj » est souvent le meilleur pour la plupart des cas.

PS : l’indentation est nettement plus discutable, chacun fait comme il a envie, temps qu’il mélange pas les deux, de même pour l’utilisation de la tabulation ou pas… Parce que sinon en vient à Go est l’histoire de l’accolade d’ouverture :-/.

Édité par Felice

+1 -0

PS : l’indentation est nettement plus discutable, chacun fait comme il a envie, temps qu’il mélange pas les deux, de même pour l’utilisation de la tabulation ou pas…

Même si Ruby n’a pas de REP (référence aux PEP de Python pour ceux qui n’auraient pas suivi ;) ), les guides de bonnes pratiques préconisent une indentation de deux espaces, et c’est aussi elle qu’on retrouve dans les projets. C’est une convention (tacite ?) donc autant l’utiliser surtout pour quand on arrivera dans un autre projet ou que quelqu’un nous rejoindra sur le notre.

Assez des salamis, je passe au jambon — Je fais un carnage si ce car nage car je nage, moi, Karnaj ! — Le comble pour un professeur de mathématique ? Mourir dans l’exercice de ses fonctions.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte