如何检查一个变量是否在Ruby中定义?是否有isset类型的方法可用?
当前回答
使用定义的?YourVariable 保持简单,傻瓜..;)
其他回答
使用定义的?关键字(文档)。它将返回一个包含项目类型的String,如果不存在则返回nil。
>> a = 1
=> 1
>> defined? a
=> "local-variable"
>> defined? b
=> nil
>> defined? nil
=> "nil"
>> defined? String
=> "constant"
>> defined? 1
=> "expression"
正如skalee评论的那样:“值得注意的是,设置为nil的变量是初始化的。”
>> n = nil
>> defined? n
=> "local-variable"
请注意“定义的”和“指定的”之间的区别。
$ ruby -e 'def f; if 1>2; x=99; end;p x, defined? x; end;f'
nil
"local-variable"
X是定义的,即使它从未被赋值!
定义?(your_var)将工作。取决于你在做什么你也可以做your_var。nil?
应该提到的是,使用defined来检查一个特定的字段是否在哈希中设置,可能会产生意想不到的行为:
var = {}
if defined? var['unknown']
puts 'this is unexpected'
end
# will output "this is unexpected"
这里的语法是正确的,但定义?Var ['unknown']将被求值为字符串"method",因此if块将被执行
检查哈希中是否存在键的正确符号是:
if var.key?('unknown')
你可以试试:
unless defined?(var)
#ruby code goes here
end
=> true
因为它返回一个布尔值。
推荐文章
- 是否可以在MiniTest中运行单个测试?
- 如何在Ruby中生成a和b之间的随机数?
- 无法安装gem -未能建立gem本地扩展-无法加载这样的文件——mkmf (LoadError)
- 如何在Ruby中创建文件
- 什么是Ruby文件。开放模式和选项?
- Ruby数组到字符串的转换
- 如何分割(块)一个Ruby数组成X元素的部分?
- Ruby中“or”和||的区别?
- 如何测试参数是否存在在轨道
- 在Ruby中不创建新字符串而修饰字符串的规范方法是什么?
- RVM不是一个函数,用' RVM use…’不会起作用
- 了解Gemfile。锁文件
- 如何确定一个数组是否包含另一个数组的所有元素
- 是什么导致这个ActiveRecord::ReadOnlyRecord错误?
- 最好的打印散列的方法