Я просто пытаюсь создать вспомогательную функцию, которая попытается получить значение из «ohai_data» и вернуть значение по умолчанию, если оно не найдено.
«ohai_data»:
ohai_data = JSON.parse(::IO.read(json_file).force_encoding(Encoding::UTF_16))
Данные в следующем формате:
{
"kernel": {
"os_info": {
"cs_name": "<the computer name>"
}
}
}
например,
Это работает:
ohai_data['kernel']['os_info']['cs_name']
Это не:
def get_val(val_to_get, ohai_data, default_val)
val = ohai_data[val_to_get]
val = val.to_s
if val.nil? or val.empty?
puts "#{val_to_get} not found within ohai_data. Using default value: #{default_val}"
val = default_val
end
puts "Getting #{val_to_get} from ohai_data: #{val}"
return val.chomp
end
machine_name = get_val("['kernel']['os_info']['cs_name']", ohai_data, 'n/a')
Я пробовал разные вещи:
неявное преобразование String в Integer:
machine_name = get_val(['kernel']['os_info']['cs_name'], ohai_data, 'n/a')
Никогда ничего не находит 1, вероятно, потому что ['kernel'] ['os_info' ] ['cs_name']! = "['kernel'] ['os_info'] ['cs_name']":
machine_name = get_val("['kernel']['os_info']['cs_name']", ohai_data, 'n/a')
Никогда ничего не находит 2, используя ohai_data.fetch (val_to_get) Никогда ничего не находит 3, используя ohai_data.fetch_values (val_to_get)