# Problemi di un principiante

**URL:** <https://www.ruby-forum.com/t/problemi-di-un-principiante/220253>\
**Category:** IT\
**Created:** [June 4, 2012, 9:34am UTC](https://www.ruby-forum.com/t/problemi-di-un-principiante/220253 "2012-06-04T09:34:05Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Gurdipe\_D](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/b77776/32.png) [@Gurdipe\_D](https://www.ruby-forum.com/u/Gurdipe_D)\
**Post date:** [June 4, 2012, 9:34am UTC](https://www.ruby-forum.com/t/problemi-di-un-principiante/220253/1 "2012-06-04T09:34:05Z")

</div>

ciao a tutti, sono nuovissimo e sto cercando di fare un progetto in ruby  
per l’università che riguarda il gioco dell’impiccato; però mi ritrovo  
ad avere vari problemi con le variabili. Praticamente quando io creo  
degli oggetti grafici tipo bottoni e ad ogni pulsante faccio eseguire  
un’azione, ho dei problemi con il valore delle variabili che non vengono  
ricordate. faccio un mini esempio…

button(“calcola”)do  
x = 5 + 2  
end

button(“stampa”) do  
title x  
end

praticamente io eseguo il codice e lui non mi stampa niente perchè il  
pulsante stampa non sa a quanto corrisponde x (questo è abbastanza  
strano perchè su altri linguaggi di programmazione il codice funziona).

Ho provato a mettere le variabili globali e comunque non mi funziona…  
visto che non centra la complessità di un esercizio, perchè provando a  
svilupparli con altri linguaggi mi vengono, a sto punto penso che  
riguardi la sintassi che si utilizza su ruby, magari bisogna scrivere il  
codice in un altro modo…  
grazie a tutti 🙂

---

<div class="post-metadata">

**Author:** ![matteosbrizzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c89c15/32.png) [@matteosbrizzi](https://www.ruby-forum.com/u/matteosbrizzi)\
**Post date:** [June 4, 2012, 11:49am UTC](https://www.ruby-forum.com/t/problemi-di-un-principiante/220253/2 "2012-06-04T11:49:05Z")

</div>

Il giorno 04 giugno 2012 09:34, matteo sbrizzi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
ha  
scritto:

> 

x dichiarata cos variabile locale al metodo del bottone “calcola”  
quindi in “stampa” x non ha valore

le variabili di istanza della classe si dichiarano cos : @x = 5 + 2

Vedi:  
[http://en.wikibooks.org/wiki/Ruby\_Programming/Syntax/Variables\_and\_Constants](http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Variables_and_Constants)

> **[Ruby Class Tutorial](http://juixe.com/techknow/index.php/2007/01/22/ruby-class-tutorial/)**
>
> Classes and interfaces are the primary building blocks of a typical Java application. Classes are the blue prints used to create objects in a running system. In contrast to Java, Ruby’s build…

Per maggiori info su ruby (come linguaggio) :  
[http://rubymonk.com/](http://rubymonk.com/)

> **[Why's (Poignant) Guide To Ruby | PDF | Punctuation | Bracket](https://www.scribd.com/document/2236084/Why-s-Poignant-Guide-to-Ruby)**
>
> Scribd is the world's largest social reading and publishing site.

[http://www.humblelittlerubybook.com/book/](http://www.humblelittlerubybook.com/book/)

> **[Search](https://pragprog.com/search/?q=programming-ruby-1-9)**
>
> We improve the lives of professional developers. We create timely, practical books on classic and cutting-edge topics to help you learn and practice your craft, and accelerate your career. Come learn with us.

Ciao,  
Sergio

---

<div class="post-metadata">

**Author:** ![matteosbrizzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c89c15/32.png) [@matteosbrizzi](https://www.ruby-forum.com/u/matteosbrizzi)\
**Post date:** [June 4, 2012, 6:35pm UTC](https://www.ruby-forum.com/t/problemi-di-un-principiante/220253/3 "2012-06-04T18:35:13Z")

</div>

On Mon, Jun 4, 2012 at 11:48 AM, Sergio B.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > praticamente io eseguo il codice e lui non mi stampa niente perch il  
> > pulsante stampa non sa a quanto corrisponde x
> 
> x dichiarata cos variabile locale al metodo del bottone “calcola”  
> quindi in “stampa” x non ha valore

non solo locale al metodo, locale _al blocco_, che secondo me  
pi il problema. Se la inizializzi fuori dal blocco ruby sapr che sta  
facendo riferimento a quella

> > [1,2,3].each do |x| a= x end  
> > =\> [1, 2, 3]  
> > a  
> > NameError: undefined local variable or method `a' for main:Object from (irb):2 from /russiawithlove:16:in `’  
> > a=nil  
> > =\> nil  
> > [1,2,3].each do |x| a= x end  
> > =\> [1, 2, 3]  
> > a  
> > =\> 3

non ho ben capito se quello che intendevi per mettendola globale, ma  
se hai fatto una cosa tipo

x= nil

class Klass  
def foo  
x = 1  
end  
end

ricadi nel caso che diceva sergio, quella “x” la fuori locale nello  
scope fuori dalla classe, e se volevi una globale dovevi fare

class Klass  
def foo  
$x = 1  
end  
end

(che brutta pratica, ma un’altro discorso)

–  
twitter: @riffraff  
blog (en, it): www.riffraff.info [riffraff.blogsome.com](http://riffraff.blogsome.com)  
work: [circleme.com](http://circleme.com)

---

<div class="post-metadata">

**Author:** ![matteosbrizzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c89c15/32.png) [@matteosbrizzi](https://www.ruby-forum.com/u/matteosbrizzi)\
**Post date:** [June 4, 2012, 7:23pm UTC](https://www.ruby-forum.com/t/problemi-di-un-principiante/220253/4 "2012-06-04T19:23:23Z")

</div>

Quando si impara un linguaggio una delle primissime cose da fare è  
googlare le regole di scoping. Studia  
[http://marakana.com/bookshelf/ruby\_tutorial/scope.html](http://marakana.com/bookshelf/ruby_tutorial/scope.html) che inizia con  
una parte fondamentale su quale sia il valore di self nei vari contesti  
e prosegue con lo scoping (e poi dimentica la parte sulle variabili  
globali, programma come se non esistessero).

Per il tuo caso particolare, a [GitHub - whymirror/shoes: a tiny graphical app kit for ruby](https://github.com/whymirror/shoes) c’è un  
esempio con Shoes in cui si vede chiaramente come far rendere visibile  
il valore di una variabile @label a due diversi button. E’ importante  
che la variabile sia una @

Ciao  
Paolo

---

<div class="post-metadata">

**Author:** ![matteosbrizzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c89c15/32.png) [@matteosbrizzi](https://www.ruby-forum.com/u/matteosbrizzi)\
**Post date:** [June 4, 2012, 7:05pm UTC](https://www.ruby-forum.com/t/problemi-di-un-principiante/220253/5 "2012-06-04T19:05:48Z")

</div>

gabriele renzi wrote in post #1063054:

> On Mon, Jun 4, 2012 at 11:48 AM, Sergio B.  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > > praticamente io eseguo il codice e lui non mi stampa niente perch il  
> > > pulsante stampa non sa a quanto corrisponde x
> > 
> > x dichiarata cos variabile locale al metodo del bottone “calcola”  
> > quindi in “stampa” x non ha valore
> 
> non solo locale al metodo, locale _al blocco_, che secondo me  
> pi il problema. Se la inizializzi fuori dal blocco ruby sapr che sta  
> facendo riferimento a quella
> 
> > > [1,2,3].each do |x| a= x end  
> > > =\> [1, 2, 3]  
> > > a  
> > > NameError: undefined local variable or method `a' for main:Object from (irb):2 from /russiawithlove:16:in `’  
> > > a=nil  
> > > =\> nil

metto il codice così si riesce a capire meglio. (non è ancora completo e  
posto quello iniziale senza modifiche).

# CREAZIONE DELL’ARRAY CONTENENTE LE PAROLE CHE PER GIOCARE.

parole = Array.new

# INSERIMENTO DI ALCUNE PAROLE NEL ARRAY

parole.push(“gazzella”,“stagionatura”,“antracite”)

# CREAZIONE DELL’INTERFACCIA SHOES

Shoes.app do

# TITOLO DEL GIOCO

title “GIOCO DELL’IMPICCATO”

# CREAZIONE DEL PULSANTE PER AVVIARE UN NUOVO GIOCO

button(“Nuovo Gioco”)do

```
numrandom = rand(parole.length)
stringacorretta = parole[numrandom]
numcaratteri = stringacorretta.length
stringa = $stringacorretta
accento = false

# CREAZIONE DEL PULSANTE CHE GENERA' CASUALMENTE UNA PAROLA
button("Genera") do

  contatore = 0
  carattere = 1

  if(stringa[numcaratteri-1] == "'")
    accento = true
    while (contatore < (numcaratteri-3))
      stringa[carattere] = "-"
      carattere = carattere + 1
      contatore = contatore + 1
    end
    title stringa
  else
    accento = false
    while (contatore < (numcaratteri-2))
      stringa[carattere] = "-"
      carattere = carattere + 1
      contatore = contatore + 1
    end
    title stringa
  end
end

# CREAZIONE DELLE LETTERE DI GIOCO

numsostituzioni = 0
i = 1

#numrandom = @numrandom
#stringacorretta = @stringacorretta
#numcaratteri = @numcaratteri
#stringa = stringacorretta

button("a")do
  if(accento == true)
    while(i < (numcaratteri-3))
      if(stringacorretta[i] == "a")
        stringa[$i] = "a"
        numsostituzioni = numsostituzioni + 1
        para numsostituzioni
      end
      i = i + 1
    end

    if(numsostituzioni == 0)
      para "Errore1"
    else
      title stringa
      para "hai fatto " + $numsostituzioni
    end
    para stringa
  else
    while(i < (numcaratteri-2))
      if(stringacorretta[i] == "a")
        stringa[i] = "a"
        numsostituzioni = numsostituzioni + 1
        para numsostituzioni
      end
      i = i + 1
    end

    if(numsostituzioni == 0)
      para "Errore1"
    else
      title stringa
      para "hai fatto " + numsostituzioni
    end
  end
end

```

> > > [1,2,3].each do |x| a= x end  
> > > =\> [1, 2, 3]  
> > > a  
> > > =\> 3
> 
> non ho ben capito se quello che intendevi per mettendola globale, ma  
> se hai fatto una cosa tipo
> 
> x= nil
> 
> class Klass  
> def foo  
> x = 1  
> end  
> end
> 
> ricadi nel caso che diceva sergio, quella “x” la fuori locale nello  
> scope fuori dalla classe, e se volevi una globale dovevi fare
> 
> class Klass  
> def foo  
> $x = 1  
> end  
> end
> 
> (che brutta pratica, ma un’altro discorso)
> 
> –  
> twitter: @riffraff  
> blog (en, it): www.riffraff.info [riffraff.blogsome.com](http://riffraff.blogsome.com)  
> work: [circleme.com](http://circleme.com)
