1
この方法で混乱していますか?Ruby - ここで何が起こっているのか教えてください
def current_user
@current_user ||= (login_from_session || login_from_cookie) unless @current_user == false
end
この方法で混乱していますか?Ruby - ここで何が起こっているのか教えてください
def current_user
@current_user ||= (login_from_session || login_from_cookie) unless @current_user == false
end
それは言う:
@current_user
@current_user
場合(||=
一部を)何もしないと戻り、他login_from_session
を呼び出し、結果を@current_user
nil
又はfalse
、このよう 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
でより明確になるように書き換えることができ @current_user
インスタンスの値を返す変数いずれの場合にも方法/ヘルパーlogin_from_cookie
を呼び出し、@current_user
これはルビーの表現力(そして美しさ)です。 Rubyでのみnil
とfalse
が偽ブールし評価することを忘れないでください/ else文と||
、&&
オペレーター
その他のヒントがルビーで、よりよく理解するならば、あなたは次のルールがあります。
任意の関数の戻り値を機能を評価し、最後の式ですので、
def foo
any_value
end
は
def foo
return any_value
end
のと同じです式の終わりに文が同じでない限り/ステートメントがない限り、そう do something if value
が
if (value)
do_something
end
||=
オペレータの同じ場合/場合
ザは
のショートカットであります@a ||= some_value
# is equivalent to
if [email protected]
@a = some_value
end
これらのルールをすべて組み合わせて、説明した方法があります。