我正在寻找“优雅”的方法来检查给定对象是否为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在评论中正确提到的,tryhelper来自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/

10-11 17:35