Преобразование массива с .join без сохранения значения - PullRequest
0 голосов
/ 04 мая 2020

У меня есть метод do_stuff, который принимает строку в качестве значения. Однако иногда передается массив из двух строк. В этой ситуации мне нужно преобразовать массив в одну строку (без запятых). Так, например, ["hello", "world"] должно стать "hello world".

Итак, если значение = массив, соедините две строки, в противном случае оставьте это в покое.

Следующая строка, которую я имею, делает то, что я хочу, но я борюсь с фактическим "сохранением" значения перед передачей его методу do_other_stuff.

  def do_stuff(value)
    value.join("") if value.is_a? Array

    do_other_stuff(value)
  end

Так что я думаю, что я близок, но как лучше всего обеспечить манипулирование value перед передачей его на do_other_stuff?

Ответы [ 3 ]

0 голосов
/ 04 мая 2020

Заменить

value.join("") if value.is_a? Array

на

value = value.join("") if value.is_a? Array

В основном вам необходимо переназначить результат обратно на value

0 голосов
/ 04 мая 2020

Используйте утку, набрав вместо проверки класса:

def do_stuff(value)
  do_other_stuff(value.try(:join, '')  ||  value)
end

.try от ActiveSupport и вернет nil, если объект не отвечает на метод. Проще говоря, ruby вы бы написали это как:

def do_stuff(value)
  do_other_stuff(value.respond_to?(:join) ? value.join("") : value)
end
0 голосов
/ 04 мая 2020

join не меняет ваш объект, вы теряете его возвращаемое значение

value = value.join if value.is_a? Array

Обратите внимание, что "" является значением по умолчанию для параметра соединения, поэтому я избавился от него

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