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 :)
on 2012-06-04 09:34
on 2012-06-04 11:49
Il giorno 04 giugno 2012 09:34, matteo sbrizzi <matteo.sbrizzi@yahoo.it> 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/Synt... http://juixe.com/techknow/index.php/2007/01/22/rub... Per maggiori info su ruby (come linguaggio) : http://rubymonk.com/ http://www.scribd.com/doc/2236084/Whys-Poignant-Gu... http://www.humblelittlerubybook.com/book/ http://pragprog.com/book/ruby3/programming-ruby-1-9 Ciao, Sergio
on 2012-06-04 18:35
On Mon, Jun 4, 2012 at 11:48 AM, Sergio Berisso <sergio.berisso@gmail.com> 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 `<main>' >> 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 work: circleme.com
on 2012-06-04 19:05
gabriele renzi wrote in post #1063054: > On Mon, Jun 4, 2012 at 11:48 AM, Sergio Berisso > <sergio.berisso@gmail.com> 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 `<main>' >>> 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 > work: circleme.com
on 2012-06-04 19:23
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 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 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
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.