IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby Discussion :

[Débutant]Problème avec les methodes


Sujet :

Ruby

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 7
    Points
    7
    Par défaut [Débutant]Problème avec les methodes
    Je viens de passer 2heures à chercher d'où viendrait l'erreur mais je ne trouve pas.
    (voir la ligne en rouge)


    class Point
    def initialize(x,y)
    @x = x
    @y = y
    end

    def plus(p)
    puts @x ; #Affichera la position x du point p1
    puts p.@x ; #Me donne une erreur. Comment faire pour obtenir la valeur de x du point p (p = p2)?

    end
    end

    p1 = Point.new(1,1)
    p2 = Point.new(2,2)
    p1.plus(p2)

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bon je suis également débutant mais je crois avoir la réponse.

    Tu ne peux pas accéder directement à l'attribut x de la classe Point.

    Pour résoudre cela le plus simple je trouve est de créer une fonction dans cette classe du genre:

    def x
    return @x
    end

    ou alors avant le def initialize tu mets

    attr_reader

    Voila essaye ces 2 solutions mais je crois bien que ç'est ça!

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 172
    Points : 219
    Points
    219
    Par défaut
    Bonjour,

    Effectivement, morius a raison : Ruby n'autorise pas l'accès directe à des attributs. Il faut impérativement passer par une méthode. On peut l'écrire soit même :

    Mais les plus simple est d'utilise attr_reader, attr_writer ou attr_accessor, qui ajoutent automatiquement ces méthodes très courantes pour nous : Le premier ajoute le lecteur (def x ... end) et le second permet d'écrire dans un attribut (def x= ... end). Le troisième ajoute les 2.

    Ainsi, ton exemple devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class Point
      attr_reader :x,:y
     
      def initialize(x,y)
        @x = x
        @y = y
      end
     
      def plus(p)
        Point.new(p.x + @x,p.y + @y)
      end
    end
     
    p1 = Point.new(1,1)
    p2 = Point.new(2,2)
     
    p1.plus(p2) # => #<Point:0x28550 @y=3, @x=3>
    Tu peux accéder maintenant à l'attribut x du point p2 avec p2.x

    Bon courage,
    Côme

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci pour ces réponses, je les essaierai lorsque j'aurai un peu plus de temps libre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [débutant] problème avec les arguments de fopen
    Par Anouschka dans le forum C++
    Réponses: 13
    Dernier message: 23/02/2006, 14h56
  2. Réponses: 2
    Dernier message: 24/10/2005, 10h23
  3. Réponses: 5
    Dernier message: 04/09/2005, 12h34
  4. [Débutant] Problème avec les paramètres d'une proc stockée
    Par babulior dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/06/2005, 15h38
  5. [Débutant]Problème avec les timers
    Par mickael777 dans le forum MFC
    Réponses: 1
    Dernier message: 11/04/2005, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo