-1

有什么方法可以像使用模块一样包含常量吗?Nokogiri::XML::Node::SaveOptions

我目前正在使用

save_options = Nokogiri::XML::Node::SaveOptions::FORMAT | Nokogiri::XML::Node::SaveOptions::AS_HTML
puts html.serialize(:save_with => save_options)

并且宁愿拥有

html.serialize(:save_with => FORMAT | AS_HTML)

我可以通过使用来改进它

include Nokogiri::XML

html.serialize(:save_with => Node::SaveOptions::FORMAT | Node::SaveOptions::AS_HTML)

或者

html.serialize(:save_with => Nokogiri::XML::Node::SaveOptions.new.format.as_html)

但这些都不是理想的。有没有人有更好的方法?我看不出为什么这不能是一个模块而不是一个类,因为创建一个对象的优势是微不足道的,甚至不存在。

4

2 回答 2

1

最安全的做法是“手动”为您需要的常量执行此操作。如果你在你的范围内写这个,常量将被定义为正确的值:

class YourClass # or module YourModule
  %w(FORMAT AS_HTML).each do |konst|
      const_set(konst, Nokogiri::XML::Node::SaveOptions.const_get(konst))
  end
end

如果常量的数量很大,您可以稍微自动化创建。问题是这是一种全有或全无的方法,类名之类的东西也是常量,所以它们也会被导入。对于您正在寻找的常量,这似乎不是问题。

class YourClass
  Nokogiri::XML::Node::SaveOptions.constants.each do |konst|
    const_set(konst, Nokogiri::XML::Node::SaveOptions.const_get(konst))
  end
end

希望能帮助到你。

于 2013-06-22T18:25:13.847 回答
-1

如果您正在使用html.serialize(:save_with => FORMAT | AS_HTML)并想简化它,为什么不使用:

html.to_html

它使用以下标志输出:

DEFAULT_HTML = FORMAT | NO_DECLARATION | NO_EMPTY_TAGS | AS_HTML

这是 Nokogiri 的标准 HTML 输出默认值。

write_to如果你想要所有的力量,你可以深入使用。

两者to_htmlwrite_to都记录在Nokogiri::XML::Node中。您可能也想在源头中四处寻找。

于 2013-06-23T21:56:58.027 回答