variable una poo lista las ejemplos declarar clases clase alcance ruby

una - variable de clase ruby



¿Ruby no puede acceder a la variable fuera del método? (3)

Soy nuevo en Ruby, y parece que Ruby admite variables definidas fuera del método que se está accediendo ahora mismo cuando quiero hacer algo:

template=<<MTEMP #methodName#:function(){}, MTEMP result=""; def generateMethods(mds) mds.each do |md| result+=template.gsub(/#methodName#/,md).to_s+"/n"; end result; end puts generateMethods([''getName'',''getAge'',''setName'',''setAge''])

Cuando intenté ejecutarlo me salió el error:

variable local indefinida o método ''plantilla'' para main: Object (NameError)

Parece que no puedo acceder a la template y la variable de result del método generateMethods ?

¿Por qué?

Actualizar:

Parece que el concepto de alcance es diferente de lo que está en el javascript?

var xx=''xx''; function afun(){ console.info(xx); }

El código anterior funcionará.


Las variables de result y de template dentro de la función generateMethods son diferentes de las declaradas en el exterior y son locales a esa función. Podrías declararlos como variables globales con $ :

$template=<<MTEMP #methodName#:function(){}, MTEMP $result=""; def generateMethods(mds) mds.each do |md| $result+=$template.gsub(/#methodName#/,md).to_s+"/n"; end $result; end puts generateMethods([''getName'',''getAge'',''setName'',''setAge''])

¿Pero cuál es tu propósito con esta función? Creo que hay una forma más limpia de hacerlo si puede explicar más su pregunta.


Las variables locales son locales al alcance en el que están definidas. ¡Por eso se llaman variables locales , después de todo!

Ergo, no puedes acceder a ellos desde un ámbito diferente. Ese es todo el punto de las variables locales.