If both a method and a variable has the same name it will use the variable.
hello = "hello from variable"
def hello
"hello from method"
end
puts hello
Is it possible somehow to use the method instead without changing name?
If both a method and a variable has the same name it will use the variable.
hello = "hello from variable"
def hello
"hello from method"
end
puts hello
Is it possible somehow to use the method instead without changing name?
puts self.hello
By the way, I agree with Henrik P. Hessel. This is a very horrible piece of code.
The ambiguity between local variables and methods only arises for receiverless message sends with no argument list. So, the solution is obvious: either provide a receiver or an argument list:
self.hello
hello()
See also
This is more of a comment than an answer, but distinguishing between local variables and methods is vital if you're using an assignment method.
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