假设我想做这个伪代码:
if plan = some_api.get_plan
return plan
else
return 'free'
end
我怎样才能在Rails中最优雅地做到这一点?我想尽量减少对some_api.get_plan
的调用。
答案 0 :(得分:5)
在这种情况下,最简单的代码是:
return some_api.get_plan || 'free'
但是由于赋值返回指定的值,你可以同时执行赋值和条件(事实上,我一直这样做以使我的代码更简洁)。
答案 1 :(得分:1)
您可以使用布尔OR运算符来执行此操作:
return (plan = some_api.get_plan) || 'free'
如果它不是nil
或false
,它将返回左手表达式的值(在这种情况下为赋值),否则它将返回右表达式的值。
请注意,仅当plan
不是本地变量但是plan=
setter方法(如attr_writer :plan
或def plan= val
)时,才需要进行分配。如果不是这种情况return some_api.get_plan || 'free'
就足够了。