推荐答案
defined? 运算符用于检查某个表达式是否已定义。它返回一个描述该表达式状态的字符串,如果表达式未定义,则返回 nil。
本题详细解读
1. defined? 的基本用法
defined? 运算符可以用于检查变量、方法、常量、类、模块等是否已定义。它的返回值是一个字符串,表示表达式的状态。
x = 10 puts defined?(x) # 输出 "local-variable" puts defined?(y) # 输出 nil,因为 y 未定义 puts defined?(puts) # 输出 "method" puts defined?(Math::PI) # 输出 "constant"
2. defined? 的返回值
defined? 返回的字符串描述了表达式的类型或状态。常见的返回值包括:
"local-variable":局部变量已定义。"instance-variable":实例变量已定义。"global-variable":全局变量已定义。"constant":常量已定义。"method":方法已定义。"yield":当前块中有yield语句。"super":当前方法中有super调用。"self":当前对象是self。"nil":表达式未定义。
3. defined? 的常见用途
defined? 通常用于条件判断,以确保在访问某个变量或调用某个方法之前,它已经被定义。
if defined?(some_variable) puts "some_variable is defined" else puts "some_variable is not defined" end
4. 注意事项
defined?不会执行表达式,它只是检查表达式是否已定义。- 对于未定义的表达式,
defined?返回nil,而不是抛出异常。
puts defined?(some_undefined_method) # 输出 nil
5. 示例代码
// www.javascriptcn.com code example
class MyClass
MY_CONSTANT = 42
def my_method
@instance_var = "instance variable"
end
end
obj = MyClass.new
puts defined?(obj) # 输出 "local-variable"
puts defined?(MyClass::MY_CONSTANT) # 输出 "constant"
puts defined?(obj.my_method) # 输出 "method"
puts defined?(obj.instance_var) # 输出 nil,因为 instance_var 未定义通过 defined? 运算符,你可以安全地检查某个表达式是否已定义,从而避免在未定义的情况下引发错误。