0

nil如果regvalue不存在,我怎样才能让以下 Ruby 代码返回 a ?

现在当有东西要返回时它工作正常,但是当没有它时它会吐出这个错误:

无法检索事实='notepadpp',分辨率='':系统找不到指定的文件。

如果条目不存在,我希望它不会输出任何内容。

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
4

2 回答 2

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
于 2015-05-05T13:52:07.790 回答
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
于 2015-05-05T13:21:18.857 回答