Ruby - IF和UNLESS声明

时间:2011-10-04 14:36:05

标签: ruby if-statement

我是新手Ruby用户,我对这部分的正确写作犹豫不决:

<% if session[:user_id].nil? || (params[:controller] != 'home' && params[:action] != 'index') %>
    something
<% else %>  
    something else
<% end %>

但IF构造的第一部分是错误的(尤其是 params 部分)。如果我试过这个:

<% if params[:controller] != 'home' && params[:action] != 'index' %>

所以我得到了不好的结果,但是如果这样:

<% unless params[:controller] == 'home' && params[:action] == 'index' %>

所以现在我已经取得了不错的成绩......

哪里可能有问题?什么可能是错的?第一个代码是我需要的,但我不知道,如何加入所有内容......

2 个答案:

答案 0 :(得分:4)

A != B AND C != D!(A == B AND C == D)

不同

只有当 BOTH 对不同时,第一个才是真的。如果 EITHER 对不同,则第二个为真。在您的示例中,要将除非转换为如果您执行以下操作:

<% if params[:controller] != 'home' || params[:action] != 'index' %>

如果EITHER不匹配,则条件为真。

在这里阅读 http://en.wikipedia.org/wiki/Logical_connective

答案 1 :(得分:2)

如果这对您有用:

<% unless params[:controller] == 'home' && params[:action] == 'index' %>

if等效的内容为:

<% if !(params[:controller] == 'home' && params[:action] == 'index') %>

将这种否定传递给你:

<% if params[:controller] != 'home' || params[:action] != 'index' %>

请注意,不仅==成为!=而且 && 变为 ||