3 ms·
token_type or lexical_type would make more sense to me. On top of defined? not returning a boolean, it has other confusing semantics. In particular, it's the
by nirvdrum 14y ago
token_type or lexical_type would make more sense to me. On top of defined? not returning a boolean, it has other confusing semantics. In particular, it's the only keyword I can think of that appears to exhibit call-by-name semantics. I don't know if this is just a special parser case, but it doesn't evaluate your arguments despite looking like a method call. So the return value can be doubly confusing.
- Xylakant 14y agoIt's a special parser case. The reason is that defined? may be followed by an uninitialized constant: jruby-1.6.8 :089 > defined? Foo::Bar => nil jruby-1.6.8 :090 > Foo::Bar NameError: uninitialized constant Foo::Bar You don't want the argument to be evaluated because that could raise a NameError. It's actually an operator.
- nirvdrum 14y agoThanks for the clarification. I was recently surprised by the return value when: z = x.y z == x.y # => true defined?(z) == defined?(x.y) # => false