先让我们来看段cancan插件中的代码:
def aliased_actions
@aliased_actions ||= default_alias_actions
end
这段代码相当于下面一段代码:
def aliased_actions
if @aliased_actions
return @aliased_actions
else
return default_alias_actions
end
end
相比这两段代码,下面代码是很不友好的,恶心的。
哪我们就来看下 ||= 这上符号。这个符号的意思就是如果全边不存在就返回右边的。
比如 x ||= y,这个方法实际是怎么执行的呢:
错误的想法:
x ||= y => x = x || y
正确的: x ||= y => x || x = y. 如果x 不为空是不会有任何操作的。
下面再看下 &&, ||
and与&&都是和。前者优先级比后者低。
or与||都是或。前者优先级比后都低
no与!都是非。前者优先级比后都低.
在ruby中 && || 这两个运算符有点特别。
当&& 左边为 false, nil 时就直接返回 左边,不执行右边。
当|| 左边不为false, nil 时就直接返回左边,不执行右边。