如何在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
答案 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
或直接使用自Method Try
以来引入的安全导航操作符{{1}}
答案 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?