我可以做一个有条件的&使用Ruby同时分配?

时间:2012-01-26 11:11:42

标签: ruby-on-rails ruby

假设我想做这个伪代码:

if plan = some_api.get_plan
  return plan
else
  return 'free'
end

我怎样才能在Rails中最优雅地做到这一点?我想尽量减少对some_api.get_plan的调用。

2 个答案:

答案 0 :(得分:5)

在这种情况下,最简单的代码是:

return some_api.get_plan || 'free'

但是由于赋值返回指定的值,你可以同时执行赋值和条件(事实上,我一直这样做以使我的代码更简洁)。

答案 1 :(得分:1)

您可以使用布尔OR运算符来执行此操作:

return (plan = some_api.get_plan) || 'free'

如果它不是nilfalse,它将返回左手表达式的值(在这种情况下为赋值),否则它将返回右表达式的值。

请注意,仅当plan不是本地变量但是plan= setter方法(如attr_writer :plandef plan= val)时,才需要进行分配。如果不是这种情况return some_api.get_plan || 'free'就足够了。