(solucionado) [Ruby] Error "undefined method"

Iniciado por Eleкtro, 20 Febrero 2012, 13:00 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

Hola de nuevo

Me surge un problema en la parte:
Código (ruby) [Seleccionar]
elsif(ARGV[0])=="-f"
featuring()


`block in featuring': undefined method
`+' for nil:NilClass (NoMethodError)


Me dice que no he definido el método, ¿Porque es tán cruel conmigo?  :-(



Código (ruby) [Seleccionar]
# -*- coding: UTF-8 -*-

# Métodos

def reset()
renamed = 0
total = -1
end

def resultado()
puts "Procesados: #{total} archivos"
puts "Renombrados: #{renamed} archivos"
end

def featuring()
Find.find(ARGV[1].gsub("\\", "/")) { |path|
path = path.encode('utf-8')
if path[" ft. "] then
File.rename(path, path.gsub(" ft. ", " feat. "))
rename += 1
end
total += 1
}
end


# Argumentos

if (ARGV[0])==()
help()
elsif(ARGV[0])=="/?"
help()
elsif(ARGV[1])==()
print "\n ERROR".red.bold + " | Debe introducir una ruta...\n\n"
help()
elsif(ARGV[0])=="-f"
reset()
featuring()
resultado()
end










RyogiShiki

#1
El problema de este Script está en las variables. Las variables tienen un "scope" o contexto en el que son usadas. Al terminar dicho contexto la variable desaparece. En este caso las variables se crean en el método reset(), y cuando el método reset desaparece las variables desaparecen con este y no se pueden usar en otro método diferente. Para solucionar este problema se usan las denominadas variables globales, que en Ruby se identifican porque empiezan con un signo "$". Así si defines el método reset así no debería haber más problemas:

Código (ruby) [Seleccionar]

def reset()
$renamed = 0
$total = -1
end


Y recuerda entonces que para usarlas siempre han de estar antecedidas con el signo "$" por ejemplo: "#{$total}" si las quieres mostrar dentro de la cadena sin concatenar.

Saludos


Eleкtro

Haces que parezca tán fácil

XD

gracias Ryo