2016-05-22 4 views
0

В рубине есть ли какой-либо метод изменения значения переменной между двумя значениями в зависимости от его текущего значения? мне нужно что-то вроде этого:Изменение значения переменной между двумя значениями

var = 'value one' 
var.flip('value one', 'value two') 
puts var # => 'value two' 

Так что, когда я называю .flip он изменяет значение var к 'value two', поскольку текущее значение var является 'value one'

+0

Почему не 'переменная = v2'? Запрошенная функция представляется оператором присваивания. Если вы говорите об атрибутах объекта, это все равно. –

+0

Объект не может стать другим объектом. – Stefan

+0

Что касается вашего редактирования: что происходит с 'v1' и' v2', они тоже перевернуты? – Stefan

ответ

3

Вы можете использовать cycle нумератор:

values = ['value one', 'value two'].cycle 
#=> #<Enumerator: ["value one", "value two"]:cycle> 

И позвони next к циклу через значения:

var = values.next 
#=> "value one" 

var = values.next 
#=> "value two" 

var = values.next 
#=> "value one" 
+0

Хороший ответ. Но есть проблема: «var» имеет начальное значение. – Sajjad

+2

Саджад, нет проблем. Что означает Стефан, это: «var =« cat »; values ​​= [var, "dog"]. цикл # => # <Перечислитель: ["cat", "dog"]: cycle>; var = values.next # => "cat"; var = values.next # => «собака»; var = values.next # => «cat» и т. д. –

+0

@ Sajjad это, безусловно, поможет, если вы сможете предоставить более подробную информацию. Объясните свой прецедент и почему вы хотите/должны изменить переменную. – Stefan

1

Я думаю, что вы можете использовать тройной оператор рубиновый или если - еще не новый, как этот

var1 = 2 

var1 = 3 == var1 ? var1 : 2 

или

irb(main):049:0> var1 = if 4 == var1 then var1 else 2 end 
=> 4 
i 
Смежные вопросы