Ruby `defined?` 在哪里定义?

有没有想过 Ruby 的 defined? 是在哪里定义的?因为它看起来很像一个方法,所以你可能会尝试检查很多地方,例如:ObjectKernelBasicObject,甚至 ClassModule,但最终却找不到它。好吧,直到你意识到这一点,答案才变得非常简单:defined? 不是一个方法,而是一个运算符或关键字。

How to use defined??

irb(main):001:0> defined? String
=> "constant"
irb(main):002:0> defined?(String)
=> "constant"

What does defined? return?

irb(main):001:0> defined? 1
=> "expression"
irb(main):002:0> defined? dummy
=> nil
irb(main):003:0> defined? printf
=> "method"
irb(main):004:0> defined? String
=> "constant"
irb(main):005:0> defined? $_
=> "global-variable"
irb(main):006:0> defined? true
=> "true"
irb(main):007:0> defined? false
=> "false"
irb(main):008:0> defined? nil
=> "nil"
irb(main):009:0> defined? RUBY_ENGINE
=> "constant"
irb(main):010:0> defined? (a, b = 1, 2)
=> "assignment"
# ...

参考资料

ruby