如何让这个Ruby代码返回nil?

时间:2015-05-05 12:14:37

标签: ruby puppet facter

如果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

2 个答案:

答案 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