有没有办法包含来自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)
但这些都不是理想的。有没有人有更好的方法?我认为没有理由认为这不是一个模块而不是一个类,因为创建一个对象的优势很小甚至不存在。
答案 0 :(得分: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
希望它有所帮助。
答案 1 :(得分:-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_html
和write_to
都记录在Nokogiri::XML::Node中。你可能也想在源头看一看。