2010-09-18 15 views
9

Si tanto un método como una variable tienen el mismo nombre, usarán la variable.El método y el nombre de la variable son los mismos

hello = "hello from variable" 

def hello 
    "hello from method" 
end 

puts hello 

¿Es posible de alguna manera utilizar el método sin cambiar el nombre?

+3

Por qué alguien debería hacer esto ?! –

+9

@Henrik: Quiero saber mejor el rubí –

+2

Esto mismo (entre muchas otras cosas buenas) se menciona en un libro llamado "Ruby In A Nutshell" por Yukihiro Matsumoto (el creador de Ruby); publicado por O'Reilly). El libro es excelente para responder exactamente el tipo de profundidad de la pregunta que usted hizo. – Zabba

Respuesta

12

Prueba esto:

puts hello() 
+0

Correcto, pero explique por qué el uso de paréntesis hace que esto funcione – Zabba

+2

porque está llamando explícitamente a un método. Mejor solo, ya sabes, usar nombres diferentes en primer lugar ... –

1
puts self.hello 

Por cierto, estoy de acuerdo con Henrik P. Hessel. Este es un código muy horrible.

5

Esto es más de un comentario de una respuesta, pero la distinción entre variables locales y métodos es vital si está utilizando un método de asignación.

class TrafficLight 
    attr_accessor :color 

    def progress_color 
    case color 
    when :orange 
     #Don't do this! 
     color = :red 
    when :green 
     #Do this instead! 
     self.color = :orange 
    else 
     raise NotImplementedError, "What should be done if color is already :red? Check with the domain expert, and build a unit test" 
    end 
    end 
end 

traffic_light = TrafficLight.new 
traffic_light.color = :green 
traffic_light.progress_color 
traffic_light.color # Now orange 
traffic_light.progress_color 
traffic_light.color # Still orange 
+1

gracias por esto, esto es exactamente lo que me estaba dando problemas. –

Cuestiones relacionadas