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 :

Problème avec Push et Length


Sujet :

Ruby

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 105
    Par défaut Problème avec Push et Length
    Bonjour,
    j'essais d'utiliser ces méthodes surtout le Push mais j''obtiens cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ./AbstractFigure.rb:20:in `addPoint1_xy': undefined method `push' for nil:NilClass (NoMethodError)
    	from Polygone.rb:13:in `addPoint_xy'
    	from Polygone.rb:20
    Ya t'il des inclusions a faire, si vous avez une idees ou pour des precisions.
    merci
    je precise que je suis sous windows et mon ruby(scite) est sur mon H.

  2. #2
    Membre expérimenté
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Par défaut
    est-ce que tu aurais un petit bout de code à nous montrer STP ?

    Il semble dire que la méthode push n'est pas définie pour l'objet en cours, hors push est défini pour tout objet Array... Ce serait bien de vérifier son type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    puts mon_objet.ancestors
    si tu voir Array dedans, c'est gagné
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 118
    Par défaut
    Euh, "puts mon_objet.ancestors" va donner "NoMethodError: undefined method `ancestors' for nil:NilClass"...
    Le problème c'est que tu n'as pas d'instance sur laquelle tu pourrais appeler la méthode "push". Il manque un appel à "mon_objet.new".
    Et un bout de code serait en effet utile.

  4. #4
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    Ton objet est une instance de la classe Nil. Pas besoin de chercher plus loin.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 105
    Par défaut
    Citation Envoyé par swirtel
    Ton objet est une instance de la classe Nil. Pas besoin de chercher plus loin.
    Oups dsl, j'etais absente, j'ais pas vu vos reponses...
    En fait c'est une classe python que j'essayai de passer en ruby :

    Python
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    from FigureGeo import *
    from Point import *
     
    class AbstractPolygone(FigureGeo):
        def __init__(self):
    	self.name = 'aPolygone'
    	self.points = []
     
        def _addPoint(self, pt):
    	self.points.append(pt)
     
        def _addPoint_xy(self, x, y):
    	self.points.append(Point(x,y))
     
        def getPerimeter(self):
    	if self.getNbrPoints() == 0:
    	    return 0.0
    	else:
    	    d = 0.0
    	    p = self[0]
    	    for p2 in self.points:
    		d = d + p.distance(p2)
    		p = p2
    	    d = d + p.distance(self[0])
    	    return d
     
        def __getitem__(self, i):
    	return self.points[i]
     
        def translate(self, vect):
    	for pt in self.points:
    	    pt.translate(vect)
     
        def getNbrPoints(self):
    	return len(self.points)
     
        def __str__(self):
    	return 'Polygone %s (%d côtés)' % (self.name, len(self.points))
     
        def __repr__(self):
    	str = 'Polygone %s:\n' % self.name
    	for pt in self.points:
    	    str = str + pt.toString() + '\n'
            return str
     
    if __name__ == "__main__":
        pol = AbstractPolygone()
        pol.addPoint_xy(3,4)
        print pol.getPoint(0)
        print pol
    mon code Ruby qui marche pas par la suite :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    require "FigureGeo.rb"
    require "Point.rb"
     
    class AbstractPolygone < FigureGeo
    	attr_reader :points, :figs
    	attr_writer :points, :figs
    	$m = 0
    	#$nbrpt = 0
    	def initialize()
    		@name = "aPolygone"
    		figs = []
    	end
     
    	def addPoint1(pt)
    		#for i
    		#points.push(pt)
    		figs[$m] = pt
    		$m = $m + 1
    		nbrpt= nbrpt + 1
    	end
     
    	def addPoint1_xy(x,y)
    		#super(x,y)
    		#points.push(Point.new(x,y)) je n'arrive pas a faire marcher le push a revoir
    		test = 
    		figs[$m] = test
    		$m = $m + 1
    	end
     
    	def getNbrElements()
    		return $m #length
    	end
     
    	def getPerimeter()
    		if getNbrElements() == 0
    			return 0.0
    		else
    			d = 0.0
    			p = self[0]
    			for p2 in points
    				d = d + p.distance(p2)
    				p = p2
    				d = d + p.distance(self[0])
    				return d
    			end
    		end
    	end
     
    	def getitem(i)
    		return figs[i]
    	end
     
    	def translate(vect)
    		for pt in points
    			pt.translate(vect)
    		end
    	end
     
    	def getName()
    		return "Polygone " + @name #@points.length
    	end
     
    	def repr()
    		str = "Polygone " + @name
    		for pt in figs
    			str = str + pt.to_s 
    		end
    		return str
    	end
    end
    A cause de l'erreur j'ai retiré le push(mis en commentaire)

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 118
    Par défaut
    D'abord une remarque: tu peux remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	attr_reader :points, :figs
    	attr_writer :points, :figs
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	attr_accessor :points, :figs
    Dans initialize tu as initialisé figs mais pas points... Celui-ci est donc une instance de NilClass et n'a donc pas de méthode push.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	def initialize()
    		@name = "aPolygone"
    		figs = []
    		points = []
    	end
    Au fait pourquoi déclares-tu une variable globale $m dans la classe AbstractPolygone !?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 105
    Par défaut
    Merci pour la méthode des accessors .
    J'avais initialisé Points = [ ]
    Cependant ça me retournait la meme erreur,
    j'ais donc essayé d'utiliser un tableau voila pourquoi j'ai utilisé
    l'index $m cad en global.
    En fait au depart j'ais voulu utilisé Points[ ] (different de ma classe Point)
    afin de contenir mes différentes figures que j'instancie et que je manipule.
    voir les methodes equivalnte en python addPoint( ) et
    addPoint_xy( )
    Donc je suis toujours coincée car ça ne fonctionne toujours pas...

    Merci

  8. #8
    Membre expérimenté
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Par défaut
    point = Array.new() ?
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 118
    Par défaut
    points = [] ... déclare une variable locale à la méthode initialize!
    Or il faut référencer la variable d'instance:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	def initialize()
    		@name = "aPolygone"
    		@figs = []
    		@points = []
    	end
    Désolé hein

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

Discussions similaires

  1. Problème avec "Content-Length" HTTP
    Par n5Rzn1D9dC dans le forum Développement
    Réponses: 1
    Dernier message: 07/12/2013, 13h31
  2. Problème avec length
    Par callofduty dans le forum Images
    Réponses: 5
    Dernier message: 04/08/2013, 19h48
  3. Stack problème avec push
    Par javast dans le forum C++
    Réponses: 14
    Dernier message: 13/02/2012, 18h46
  4. problème avec *a.length
    Par parsy dans le forum Ruby
    Réponses: 1
    Dernier message: 01/10/2010, 16h02
  5. [Flex3] pseudo Push flex/php et problème avec URLloader
    Par ouaqa dans le forum Flex
    Réponses: 4
    Dernier message: 17/09/2010, 13h19

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