如何检查一个变量是否在Ruby中定义?是否有isset类型的方法可用?
当前回答
试着用“除非”而不是“如果”
a = "apple"
# Note that b is not declared
c = nil
unless defined? a
puts "a is not defined"
end
unless defined? b
puts "b is not defined"
end
unless defined? c
puts "c is not defined"
end
其他回答
定义?(your_var)将工作。取决于你在做什么你也可以做your_var。nil?
使用定义的?关键字(文档)。它将返回一个包含项目类型的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"
定义?这很好,但如果你在Rails环境中,你也可以使用try,特别是在你想检查动态变量名的情况下:
foo = 1
my_foo = "foo"
my_bar = "bar"
try(:foo) # => 1
try(:bar) # => nil
try(my_foo) # => 1
try(my_bar) # => nil
留下一个非常简单的例子,以防有用。
当变量不存在时:
if defined? a then "hi" end
# => nil
当变量存在时:
a = 2
if defined? a then "hi" end
# => "hi"
如果它存在,你什么也不做,如果它不存在,你就创建它,这是很有用的。
def get_var
@var ||= SomeClass.new()
end
这只创建一次新实例。之后它就一直返回var。
推荐文章
- 在Ruby中不创建新字符串而修饰字符串的规范方法是什么?
- RVM不是一个函数,用' RVM use…’不会起作用
- 了解Gemfile。锁文件
- 如何确定一个数组是否包含另一个数组的所有元素
- 是什么导致这个ActiveRecord::ReadOnlyRecord错误?
- 最好的打印散列的方法
- Rails:dependent =>:destroy VS:dependent =>:delete_all
- 我可以在不包含Ruby模块的情况下调用实例方法吗?
- 如何将新项目添加到哈希
- 测试一个Ruby类是否是另一个类的子类
- 什么时候使用Struct vs. OpenStruct?
- 数组到哈希Ruby
- 我如何让红宝石打印一个完整的回溯而不是截断一个?
- 如何使用RSpec的should_raise与任何类型的异常?
- 如何创建退出消息