如果nil
不存在,我怎样才能获得以下Ruby代码以返回regvalue
?
现在它可以在有东西返回时正常工作,但是当它没有吐出这个错误时:
无法检索事实=' notepadpp',resolution ='':The 系统找不到指定的文件。
如果条目不存在,我希望它不会输出任何内容。
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
答案 0 :(得分:2)
谢谢!你确实指出了我正确的方向。如果这是一个真正的解决方案,让我知道,并且Ill标记为此答案。我拿了你的代码并加了救援。
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
答案 1 :(得分:1)
我确实清理了代码,一切都突然起作用了:
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