级联Ruby逻辑?

时间:2013-07-25 18:12:10

标签: ruby-on-rails ruby

是否可以针对已退出用户执行以下操作,而不会在nil错误时触发.consumer被调用?

if signed_in? && current_user.consumer
  puts "Hello world"
end

对于我的大部分网站,我不得不嵌套这些类型的条件:

if signed_in?
  if current_user.consumer
  end
end

...看起来并不那么糟糕,但是当你在页面上有很多其他代码时,它可能很麻烦。

我想要陈述signed_in?  被评估,如果为真,则评估第二个条件...但是所有都在一行中。这可能吗?

1 个答案:

答案 0 :(得分:1)

是的! Ruby支持短路逻辑,因此您的第一个代码块将完全按照您的意愿执行:如果signed_in?求值为false,则Ruby解释器将是惰性的,并且不会考虑其余的条件。

同样,如果用户未登录,!signed_in? || current_user.banned?会在发现!signed_in?true并且无需评估current_user.banned?的情况下发生短路。