Ruby defined? method evaluation
Today I learned that Ruby Object method defined?
evaluates if the argument is anything recognizable, not just if the variable are set. Here are some examples:
undefined_foo #=> NameError: undefined local variable or method `undefined_foo'
defined? undefined_foo #=> nil
defined? nil #=> "nil"
defined? "foo" #=> "expression"
defined? [] #=> "expression"
defined? def x; end #=> "expression"
defined? class Foo; end #=> "expression"
defined? @foo = :bar #=> "assignment"
@foo = :bar
defined? @foo #=> "instance-variable"
foo = :bar
defined? foo #=> "local-variable"
def foo; end
defined? foo() #=> "method"
class Foo; end
defined? Foo #=> "constant"
h/t @VidalEkechukwu
Tweet