[1] pry(main)> class Test
[1] pry(main)* def gah
[1] pry(main)* puts "gah"
[1] pry(main)* end
[1] pry(main)* def fah
[1] pry(main)* gah
[1] pry(main)* puts gah
[1] pry(main)* gah="now local variable"
[1] pry(main)* puts gah
[1] pry(main)* gah()
[1] pry(main)* end
[1] pry(main)* end
[3] pry(main)> Test.new.fahBasically, if for some reason a variable is defined in current context with the same name as a method, then calling that method later, may result in using the variable instead of the method.
gah
gah
now local variable
gah
Calling `gah` in the beginning results in calling the instance method `#gah`. But after we do `gah="now local variable"` then calling `gah` results in obtaining the local variable `gah` value. Finally calling `gah()` always results in calling the instance method.
Simple thing but can be confusing. Solution would be to always call methods using parentheses or make your methods short to easily spot any such mistakes.
My initial reaction when I first learn you can call methods without parentheses in ruby was that it is a bad idea. Then I became lazy and stopped using them. How can we be so lazy? Only 2 characters? Oddly enough I don't feel like starting to write parentheses again.
No comments:
Post a Comment