在Ruby中,我应该使用|| =还是定义?记忆?

Kri*_*ris 15 ruby ruby-on-rails memoization

我应该用吗? if defined?

 return @current_user_session if defined?(@current_user_session)
 @current_user_session = UserSession.find
Run Code Online (Sandbox Code Playgroud)

要么 ||=

@current_user_session ||= UserSession.find
Run Code Online (Sandbox Code Playgroud)

我注意到if defined?最近使用的方法越来越多.一个人对另一个人有什么好处吗?就个人而言,我更喜欢||=可读性.我也认为Rails可能有一个memoize透明地提供这种行为的宏.是这样的吗?

gun*_*uns 25

注意:如果x返回false,则x || = y指定x = y.这可能意味着x是undefined,nil或false.

虽然可能不在@current_user_session实例变量的上下文中,但很多时候会定义变量和false.

如果你想要简洁,试试条件结构:

defined?(@current_user_session) ?
    @current_user_session : @current_user_session = UserSession.find
Run Code Online (Sandbox Code Playgroud)

要不就:

defined?(@current_user_session) || @current_user_session = UserSession.find
Run Code Online (Sandbox Code Playgroud)

如果你只需要初始化变量.