Элегантный способ изменить переменную в Ruby, если она равна заданному значению c - PullRequest
2 голосов
/ 17 июня 2020

Я ищу более элегантный способ сделать это:

my_var = nil if my_var == 2

В настоящее время мне приходится повторять my_var дважды, что не читается и не выглядит очень красиво.

Это становится еще более уродливым, если I my_var является ключом от ha sh:

my_hash[:my_key] = nil if my_hash[:my_key] == 12

Если бы я хотел изменить его, только если он уже был равен нулю, я мог бы сделать это:

my_var ||= 2

Что намного чище.

Есть ли лучший способ изменить значение переменной, если оно равно определенному значению?

1 Ответ

1 голос
/ 17 июня 2020

Похоже, вы хотите использовать контрольные значения для представления nil значений.

Вот один способ, который может или не может точно соответствовать вашей ситуации. Сначала определите функцию, которая генерирует ваш нилификатор на основе выбранного вами контрольного значения:

def make_nilifier sentinel
  -> (var) { var == sentinel ? nil : var }
end

В вашем первом примере контрольные значения равны 2:

nilifier = make_nilifier 2

Затем вы можете присваивать значения my_var через вызовы nilifier:

> my_var = nilifier.call 1
> my_var
=> 1

> my_var = nilifier.call 2
> my_var
=> nil

В вашем случае вы проверяете значения, которые уже установлены - это дает возможность проверить значение при присвоении. Опять же, это может или не может точно соответствовать, но может дать некоторые идеи относительно чего-то полезного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...