我正在寻找“优雅”的方法来检查给定对象是否为nil,它的属性是否为nil或空目前我有这张支票
response = foo.call() # some service call, no http code given :)
raise StandardError, "Response is not valid" if response.nil? || response['data'].nil? || reponse['data'].emtpy?
有没有更优雅的方法来做到这一点,并避免三倍或检查?如果有人提出这样的建议,用
begin/catch
包装就不是一种优雅的方式了。 最佳答案
这个怎么样?
data = response.try(:[], 'data')
raise Exception, "Response is not valid" if data.nil? || data.empty?
正如@ksol在评论中正确提到的,
try
helper来自ActiveSupport但重新实施一点也不难。class Object
def try method, *args
if respond_to? method
send method, *args
else
nil
end
end
end
class Foo
def hello name
"hello #{name}"
end
end
f = Foo.new
f.try(:bar) # => nil
f.try(:hello, 'world') # => "hello world"
nil.try(:wat) # => nil
选择
如果您不想拖拽整个activesupport,也不想编写已经编写好的代码,那么这里是Object#andand。
data = response.andand['data']
raise Exception, "Response is not valid" if data.nil? || data.empty?
关于ruby - 检查Object是否为nil以及所需属性是否为nil或为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13362139/