Ruby 变量存在则保存
Ruby save variable if it exists
我正在用 Nokogiri 解析一个 XML 文件,如果 XML 中存在一个值,我只想保存该变量。现在,我正在用 nil
拯救它,这为我生成了错误的结果。那么,如何将我的语句设置为仅在这两个都有实际值(不是零)时才保存?
port.xpath("service").each do |service|
product = service.at_xpath("@product").value rescue nil
version = service.at_xpath("@version").value rescue nil
目前,当文件被解析时,这两个值都可能为 nil,然后匹配所有内容!相反,如果找不到 product
& version
匹配,我真的需要我的解析器传递值。
例如,假设 XML 表示服务是 product vFTP
和 version 2.2.1
。这很好,因为它匹配正确 (vFTP 2.2.1)。
但是,如果 version nil
,我现在遇到了一个问题,因为它现在将与所有版本的 vFTP 匹配。
检查 defined?
的 if statement
似乎合乎逻辑,但出于某种原因,这对我来说似乎不正确。
这里有几种方法。在下一行:
next unless [product, version].all?(&:present?)
或
next if [product, version].any?(&:nil?)
我正在用 Nokogiri 解析一个 XML 文件,如果 XML 中存在一个值,我只想保存该变量。现在,我正在用 nil
拯救它,这为我生成了错误的结果。那么,如何将我的语句设置为仅在这两个都有实际值(不是零)时才保存?
port.xpath("service").each do |service|
product = service.at_xpath("@product").value rescue nil
version = service.at_xpath("@version").value rescue nil
目前,当文件被解析时,这两个值都可能为 nil,然后匹配所有内容!相反,如果找不到 product
& version
匹配,我真的需要我的解析器传递值。
例如,假设 XML 表示服务是 product vFTP
和 version 2.2.1
。这很好,因为它匹配正确 (vFTP 2.2.1)。
但是,如果 version nil
,我现在遇到了一个问题,因为它现在将与所有版本的 vFTP 匹配。
检查 defined?
的 if statement
似乎合乎逻辑,但出于某种原因,这对我来说似乎不正确。
这里有几种方法。在下一行:
next unless [product, version].all?(&:present?)
或
next if [product, version].any?(&:nil?)