Получите ценность от Ha sh на основе строки - PullRequest
0 голосов
/ 19 июня 2020

У меня есть ha sh выглядит так:

response = {
  data: {
     target_file: "file.jpg"
  }
}

и есть строка "data.target_file"

Я хочу, как я могу получить доступ к значению target_file на основе этого строка, например, доступ с помощью response[:data][:target_file]

, как я могу преобразовать динамически из строки "data.target_file" в response[:data][:target_file]

, поэтому я не хочу использовать что-то вроде response["#{string.split('.')[0]}".to_sym]["#{string.split('.')[1]}".to_sym]

1 Ответ

4 голосов
/ 19 июня 2020

Вы можете использовать split, как вы показали, для преобразования ключей в массив строк, затем map строк в символы и, наконец, dig ha sh при извлечении элементов массива в качестве аргументов с оператор splat *:

response.dig(*"data.target_file".split(".").map(&:to_sym))

Если вы видите, что повторяете этот код, вы можете расширить класс Hash и добавить метод, который это делает:

class Hash
  def dot(path)
    self.dig(*path.split(".").map(&:to_sym))
  end
end

Затем вы просто использовал бы:

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