I’m learning Ruby and I like playing with irb to discover new features and tricks. Today I was playing with variables and methods because I wanted to know which one took preference in front of the other one. Everything looked fine until I tried this:
def test
puts "hello"
end
test = "bye" if false
puts test
I was expecting this to return "hello" , but it doesn’t. So, I suppose the parser is treating ‘test’ as a variable instead of as a method. I have two questions:
- Is my assumption correct?
- Is there any way to know if something is a variable or a method? Some method like
test.is_variable?
The local variable
testis created anyway (with default valuenil), and given that local variables overshadow methods with the same name, that’s the value you get. Just an hour ago someone got bitten by a subtle variation of the theme. And don’t you think this only happens with one-liner conditionals:That’s because Ruby defines variables when they are parsed (and not when they are executed).