切换值的最佳方法

时间:2014-02-11 13:59:37

标签: ruby

我想找到最有效和简短的方法来执行以下操作:

if current_value == "hide"
  current_value   = "show"
elsif current_value == "show"
 current_value     = "hide"
end

所以,我想与目前的情况相反。

谢谢!

8 个答案:

答案 0 :(得分:8)

三元怎么样?

current_value == "hide" ? current_value = "show" : current_value = "hide"

也许这会更好:

current_value = (current_value == "hide") ? "show" : "hide"

答案 1 :(得分:3)

四种方式:

#1
c = 'show'
c = c['hide'] ? 'show' : 'hide'

#2
c = case c
  when 'hide' then 'show'
  else 'show'
end

#3
c, = ['show','hide']-[c]

#4
show = ['show', 'hide'].cycle

p show.next #=> 'show'
p show.next #=> 'hide'
p show.next #=> 'show'

答案 2 :(得分:2)

一种不太漂亮但可行的方式:

current_value = (["hide", "show"] - [current_value])[0]

答案 3 :(得分:2)

如果current_value只能是“show”或“hide”,为什么不使用布尔变量,比如is_visible?

然后就像这样切换:

is_visible = !is_visible

答案 4 :(得分:1)

这个怎么样?

VALUES = {
  'show' => 'hide',
  'hide' => 'show',
}
current_value = VALUES[current_value]

另一种非正统的方法:)

VALUES = %w[hide show hide]

current_value = 'show'
current_value = VALUES[VALUES.index(current_value) + 1] # => "hide"

答案 5 :(得分:1)

我认为正确的方法是保持像Yanhao建议的布尔值,如果你要在CSS类中调用它,那么在那里使用三元组。

current_value = true # initial setting
...
current_value ^= true # alternating between `true` and `false`
...
current_value ? "hide" : "show" # using it to call a string value

答案 6 :(得分:1)

可以更轻松地重复使用的方法(更轻松地编辑切换值)

c = 'show'

TOGGLE_VALUES = ['show', 'hide']

c = TOGGLE_VALUES[ TOGGLE_VALUES.index(c) - 1]

答案 7 :(得分:1)

当一个人迟到(这是答案#8)时,必须深入挖掘。通常不会产生最好的解决方案,但灰色细胞确实可以进行锻炼。这里有一些翻转'show'和'hide'的方法(没有特别的顺序):

SH = 'showhide'
a = ['show', 'hide']
h = {'show'=>'hide'}

c = 'show'

1

c = SH.sub(c,'')                                 #=> 'hide'

2

c = SH[/.+(?=#{c})|(?<=#{c}).+/]                 #=> 'hide' 

3

c = (SH.end_with? c) ? "show" : "hide"           #=> 'hide'

4

d = "hide"     
c, = (c,d = d,c)                                 #=> 'hide'

5

c = SH.chomp(c).reverse.chomp(c.reverse).reverse #=> 'hide'

6

c, = a.reverse!                                  #=> 'hide'

7

c = (h=h.invert)[c]                              #=> 'hide'

在#2中,(?=#{c})(?<=#{c})分别是积极向前看和积极向后看。