我希望有人可以帮我识别最常用的方法来测试变量是否为nil或false,以便于阅读。
这是我明确的例子:
if somevar.nil? # explicitly checking for nil.
puts "Its nil."
end
写作是否更好:
if !somevar # implicit
puts "Var is nil or false."
end
我真的很喜欢这样:
if not somevar # implicit
puts "Var is nil or false"
end
从我正在阅读的内容来看,应该在某种程度上避免明确地测试nil
,因为它通常不需要。大多数示例建议仅在存在变量时才采取措施。但是,我想在变量不存在时执行操作。
弃绝的主要灵感来自:ruby_idioms
答案 0 :(得分:3)
def truthiness(value)
if value
"truthy"
else
"falsy"
end
end
puts "nil:", truthiness(nil) # falsy
puts "false:", truthiness(false) # falsy
puts "true:", truthiness(true) # truthy
puts "[]:", truthiness([]) # truthy
puts "{}:", truthiness({}) # truthy
puts "0:", truthiness(0) # truthy
我知道你了解Python,所以我可以这样说:
在Python中,None,False和空容器(如[],{},甚至0)都是假的。
在Ruby中,nil和false都是假的,而大多数其他的东西都是真的,甚至是[],{}和0。
答案 1 :(得分:3)
我认为ruby中用于测试某些内容false
或nil
的最惯用方法是使用unless
:
unless somevar
puts "Var is nil or false."
end
对于负面条件(或控制流程),请
unless
超过if
||
)。# bad do_something if !some_condition # bad do_something if not some_condition # good do_something unless some_condition # another good option some_condition || do_something
答案 2 :(得分:2)
您可以使用defined?
关键字:
defined?
表达式测试表达式是否引用任何可识别的内容(文本对象,已初始化的局部变量,当前作用域中可见的方法名称等)。 如果无法解析表达式,则返回值为nil 。否则,返回值提供有关表达式的信息。
unless defined?(var)
#your code
end
快速PRY测试,defined?
在定义变量时返回的内容以及何时不返回: -
arup@linux-wzza:~/Ruby> pry
[1] pry(main)> defined?(x)
=> nil
[2] pry(main)> x = nil
=> nil
[3] pry(main)> defined? x
=> "local-variable"
[4] pry(main)>