Как получить этот код Ruby, чтобы вернуть ноль?
Как я могу получить следующий код Ruby для возврата nil
если regvalue
не существует?
Прямо сейчас все работает нормально, когда есть что вернуть, а когда нет, выдает эту ошибку:
Не удалось получить fact = 'notepadpp', resolution = '': система не может найти указанный файл.
Я ожидал бы, что он просто ничего не выведет, если запись не существует.
Facter.add(:notepadpp) do
# restricts module to windows
confine :kernel => :windows
setcode do
require 'facter/util/registry'
notepadpp = nil
regvalue = Facter::Util::Registry.hklm_read('SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Notepad++', 'Display')
notepadpp = regvalue if regvalue && !regvalue.empty?
# if regvalue and not regvalue.empty?
# notepadpp = regvalue
# else nil end
end
end
2 ответа
Спасибо! Вы указали мне в правильном направлении. Дайте мне знать, если это реальное исправление, и я отмечу это ответом. Я взял твой код и добавил спасение.
Facter.add(:notepadpp) do
confine :kernel => :windows # restricts module to windows
setcode do
require 'facter/util/registry'
begin
Facter::Util::Registry.hklm_read('SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Notepad++', 'DisplayVersion')
rescue
nil
end
end
end
Я очистил код, и все вдруг заработало:
Facter.add(:notepadpp) do
confine :kernel => :windows # restricts module to windows
setcode do
require 'facter/util/registry'
Facter::Util::Registry.hklm_read('...\Notepad++', 'Display') rescue nil
end
end
#⇒ #<Facter::Util::Fact:0xb907a44 ...>
Функция не достаточно умна, чтобы вернуться nil
когда ветка реестра не найдена, она, скорее всего, выдает исключение, поэтому мы должны его обработать.
UPD Если вы не хотите, чтобы этот факт был добавлен, если раздел реестра не существует:
require 'facter/util/registry'
reg_value = Facter::Util::Registry.hklm_read('...\Notepad++', 'Display') rescue nil
Facter.add(:notepadpp) do
confine :kernel => :windows # restricts module to windows
setcode do
regvalue
end
end if regvalue