我想找到最有效和简短的方法来执行以下操作:
if current_value == "hide"
current_value = "show"
elsif current_value == "show"
current_value = "hide"
end
所以,我想与目前的情况相反。
谢谢!
答案 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})
分别是积极向前看和积极向后看。