Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/08/2007, à 11:14

Boolean

[Résolu] Ruby et variables

Bonjour,

Est-il possible d'utiliser des variables dynamiques avec Ruby ?(le nom de la variable est définit pendant l'execution du prog...).

Et si oui, j'aimerais bien savoir comment ça s'ecrit.

Merci.

Dernière modification par Boolean (Le 31/08/2007, à 06:19)


Bidouiller c'est bien, utiliser c'est mieux...

Hors ligne

#2 Le 10/08/2007, à 14:42

kaworu

Re : [Résolu] Ruby et variables

Salut !
mh... je sais pas si c'est exactement ça que tu cherche, mais tu peux passer par instance_variable_set :

>> nom, valeur = "plop", "foo"
=> ["plop", "foo"]
>> instance_variable_set "@#{nom}", valeur
=> "foo"
>> @plop
=> "foo"

Peux-tu donner un exemple d'utilisation ?

Dernière modification par kaworu (Le 10/08/2007, à 14:43)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#3 Le 17/08/2007, à 07:56

Boolean

Re : [Résolu] Ruby et variables

Salut kaworu et merci pour la réponse...

J'ai actuellement résolu le probleme avec un hash mais je ne connaissait pas "instance_variable_set" et je vais regarder exactement comment ça fonctionne. smile

Pour exemple, je prendrais un programme de jeu quelconque avec une classe joueur:

class Joueur

 def initialize nom
  @nom=nom
  @score=0
 end

 ...
end

je voudrais recuperer les noms des joueurs avec gets.chomp ( ex: =>kaworu) et pouvoir ecrire ensuite:

'kaworu'=Joueur.new()

'kaworu' etant la valeur string recuperée par mon gets.chomp

J'ai résolu le probleme en faisant un hash avec kaworu pour clé et joueur.new() comme valeur mais peut-etre que ce n'est pas la bonne maniere de proceder.

a+


Bidouiller c'est bien, utiliser c'est mieux...

Hors ligne

#4 Le 19/08/2007, à 23:51

kaworu

Re : [Résolu] Ruby et variables

Bon, si t'as un joueur, tu peux faire une variable avec un nom statique (comme player). Si t'as plusieurs joueurs, tu peux créer un objet players_list avec la liste des joueurs. ça peut soit être effectivement un Hash (t'as des fonctions sympas), soit une OpenStruct (c'est un peu comme un Hash, avec les fonctions sympa en moins, possible de convertir un Hash en OpenStruct (avec OpenStruct#marshal_load) et le contraire (OpenStruct#marshal_dump). Voir créer ta classe PlayerList si t'as besoin de fonctions plus spécifiques que les fonctions de Hash.

Je vois pas l'avantage d'avoir la variable qui a le même nom que le joueur. simplement parce que le concept de base d'une variable c'est justement que la valeur est dynamique, et non pas son nom ! (après ton code est illisible à chaque fois que tu voudra l'utiliser !). je ferai plutôt :

print "Nom: "
player = Player.new(gets.chomp)

De manière générale, ruby est vraiment puissant niveau introspection. Lorsque je veux faire quelque chose pour laquelle aucune méthode n'est déjà écrite, c'est qu'il y a une manière plus élégante de résoudre ce problème smile


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#5 Le 22/08/2007, à 02:49

Boolean

Re : [Résolu] Ruby et variables

En fait, je me suis mis a Ruby (et j'aime ça) pour apprendre la programmation orienté objet, donc je ne suis pas un expert...:/

C'est vrai que: kaworu=player.new(kaworu) c'est pas terrible mais mon probleme au depart venait du fait que lorsqu'il y a plusieurs joueurs, je pouvais vraisemblablement pas ecrire:

player=player(pierre)
player=player(paul)
player=player(jacques)

puisque le contenu de player serait remplacé a chaque assignation non?
Je voulais donc ecrire:

player1=player(pierre)
player2=player(paul)
player3=player(jacques)

...pour eventuellement pouvoir acceder aux scores des joueurs par un truc du genre:

player1.score

Merci de ton aide kaworu smile


Bidouiller c'est bien, utiliser c'est mieux...

Hors ligne

#6 Le 26/08/2007, à 05:45

kaworu

Re : [Résolu] Ruby et variables

Salut !
vu ce que tu me dis, je pense que le mieux est de faire une liste de joueurs.
Soit faire une classe (qui gère une liste en interne mais qui pourra bénéficier de méthodes spécifiques), soit un "simple" Array :

players = Array.new
loop do
    print "Entrez le nom (vide si plus de joueurs) : "
    player_name = gets.chomp
    break if player_name.empty?
    players << Player.new(player_name)
end
# ici players est une liste avec tous les joueurs

à part Array#<< (qui "push" un élément dans une liste), même si tu ne connais pas ruby, le code est vraiment clair non ? (c'est ce qui est beau avec Ruby smile)

EDIT :
n'hésite pas à poser plus de questions. je traîne pas souvent sur le forum mais quand je passe je risque pas de louper un topic sur Ruby wink
Autrement je te conseil aussi de rejoindre le cannal IRC de Ruby :
server : irc.freenode.net
channel: #rubyfr

wink

Dernière modification par kaworu (Le 26/08/2007, à 05:48)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#7 Le 31/08/2007, à 06:18

Boolean

Re : [Résolu] Ruby et variables

Salut,

J'ai opté pour une classe qui gere la liste (sous forme de hash) et ca marche nickel. cool

C'est vrai que c'est clair (et puissant) Ruby.

Merci pour tes bons conseils et pour l'IRC... smile

a+


Bidouiller c'est bien, utiliser c'est mieux...

Hors ligne