用params重构红宝石条件

时间:2018-01-22 11:48:12

标签: ruby refactoring conditional-statements reek

我想知道在ruby中是否有更简单的方法来处理这种情况

我的条件:

a = params[:smth].to_s == 'foo' ? 'foo2' : params[:smth].to_s

这种情况的问题,即2次使用params[:smth]的警告,有可能将params[:smth]分配给变量,但也许你知道更聪明的方式吗?

2 个答案:

答案 0 :(得分:7)

我可能会这样写:

a = params[:smth].to_s
a = 'foo2' if a == 'foo'

答案 1 :(得分:0)

你可以使用lambda。 但之前设置的varialbe是最好的方法。

像这样:

p =->(s){s == 'foo' ? 'foo2' : s}

params = {smth: 'foo'}
a = p.(params[:smth].to_s)
# => "foo2"

params = {smth: 'bar'}
a = p.(params[:smth].to_s)
# => "bar"