这种方法感到困惑 - 有人可以向我解释一下吗?
def current_user
@current_user ||= (login_from_session || login_from_cookie) unless @current_user == false
end
答案 0 :(得分:4)
它说:
@current_user
(@current_user
部分)||=
login_from_session
并将结果分配给@current_user
nil
或false
,请调用方法/帮助login_from_cookie
并将结果分配给@current_user
@current_user
实例变量可以通过这种方式重写它更明确
def current_user
if !(@current_user == false) # 1
if (@current_user)
return @current_user # 2
end
if (@current_user = login_from_session)
return @current_user # 3
end
if (@current_user = login_from_cookie)
return @current_user # 4
end
end
return @current_user # 5
end
这是红宝石表现力的力量(和美)。请记住,在Ruby中,只有nil
和false
在if / else语句和||
,&&
运算符
其他提示要更好地理解,在红宝石中你有以下规则:
任何函数的返回值是为函数计算的最后一个表达式,所以
def foo
any_value
end
与
相同def foo
return any_value
end
表达式末尾的if / unless语句与if / unless语句相同,所以
do something if value
与
相同if (value)
do_something
end
||=
运算符是
@a ||= some_value
# is equivalent to
if !@a
@a = some_value
end
结合所有这些规则,你已经解释了这个方法。