рубиновый хеш с переменной в качестве ключа - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть простой (я думаю) вопрос о хэш-доступе.У меня есть следующий хэш (получение файла формы yml)

 {
   "all"=>   {
      "children"=> {
         "TSL-PCM-126"=>    {
            "children"=>  {
               "my_host-TSL-PCM-126"=> {
                  "hosts"=>   {
                     "TSF-W01"=> {
                        "ip"=>"192.168.0.201"
                     }
                  }
               }
            }
          }
      }
   }
}

Я храню имя хоста как переменную

my_pc="#{`hostname`}" ==> my_pc="TSL-PCM-126"

Я хочу получить доступ к нужному значению, но использую переменную my_pc в качестве ключа...

(инвентарь = Yaml загрузка моего файла)

puts inventory["all"]["children"] ==> Work
puts inventory["all"]["children"]["TSL-PCM-126"] ==> Work 
puts inventory["all"]["children"]["#{my_pc}"] ==> NOK :( 

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Когда я ввожу

`hostname`

На моем ПК я получаю ответ "dell\n".Ключевым моментом здесь является \n в конце.Это символ конца строки.Поэтому мне интересно, действительно ли на вашем ПК он возвращает my_pc="TSL-PCM-126\n".Конец строки не будет очевиден, если вы используете только puts для его проверки.Как "TSL-PCM-126\n" != "TSL-PCM-126" вы не получите совпадение ключей.

Строковый метод chomp удалит символ \n и даст вам совпадение, которое вы ищете.Итак:

puts inventory["all"]["children"][`hostname`.chomp]
0 голосов
/ 27 сентября 2018

После редактирования OP, используйте

my_pc = `hostname`.strip

, чтобы избежать новой строки в вашей строке.

Это работает, как и ожидалось,

> my_pc
 => "TSL-PCM-126" 
> puts inventory["all"]["children"]["#{my_pc}"]
{"children"=>{"my_host-TSL-PCM-126"=>{"hosts"=>{"TSF-W01"=>{"ip"=>"192.168.0.201"}}

Вам не нужна строкахотя интерполяция:

> inventory["all"]["children"][my_pc]
=> {"children"=>{"my_host-TSL-PCM-126"=>{"hosts"=>{"TSF-W01"=>{"ip"=>"192.168.0.201"}}}}}

В вашей переменной / хэше либо есть опечатка, либо вы пытаетесь присвоить возвращаемое значение puts, которое равно nil.

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