如何在Ruby中将以下代码减少到一行?

时间:2011-06-22 09:43:52

标签: ruby-on-rails ruby ruby-on-rails-3

如何在Ruby中将以下代码减少到一行?

unless(current_facebook_user.nil?)
    unless(current_facebook_user.client.nil?)
        unless(current_facebook_user.client.default_params.nil?)
            val = current_facebook_user.client.default_params
        end
    end
end

4 个答案:

答案 0 :(得分:13)

您可以使用try()以来active_support/core_ext/object/try.rb引入的val = current_facebook_user.try(:client).try(:default_params) 方法

val = current_facebook_user&.client&.default_params

Rails 2.3.2

或直接使用自Method Try

以来引入的安全导航操作符
{{1}}

记录Ruby 2.3.0

here

答案 1 :(得分:1)

在一个||中使用unless运算符:val = ... unless cond1 || cond2 || cond3

或使用&&来否定if中的条件:val = ... if !cond1 && !cond2

答案 2 :(得分:0)

你可能不需要第三次检查,好像.default_params是零,val也会被评估为零(如果它开始为零,这没有问题;如果它已经填充,你可能想要保留第三个守卫: - )

val = current_facebook_user.client.default_params if current_facebook_user && current_facebook_user.client && current_facebook_user.client.default_params

答案 3 :(得分:0)

val = current_facebook_user.client.default_params unless current_facebook_user.nil? or current_facebook_user.client.nil? or current_facebook_user.client.default_params.nil?