我经常需要生成SVG文件,我喜欢使用Ruby的Nokogiri。关于Nokogiri的好处是,它允许您创建将哈希传递给其“函数”的属性,如此
doc.rect(:x => 0, :y => 0, :width => 100, :height => 100)
这很棒。有一些属性带有连字符:在这种情况下,你可以利用Ruby的强大功能并执行类似
的操作doc.rect(:x => 0, :y => 0, :width => 100, :height => 100, :stroke => 'black', 'stroke-width' => 3)
一切都比较好。输入Ruby 2.0和命名参数。我更喜欢这种语法,它更简洁,更小巧,我更喜欢。但是,现在创建带连字符的属性的唯一方法是混合使用两种方法,只要在命名参数之后放置'hash'(我假设它必须是这样,但我没有检查过)。无论如何,它很难看。
使用命名参数语法,有什么方法可以让人们想到创建带连字符的属性吗?
编辑:为了澄清,命名参数如下所示:
doc.rect(x: 0, y: 0, width: 100, height: 100)
答案 0 :(得分:1)
使用
'stroke-width'.to_sym
或
:'stroke-width'
两者都评估为符号。实际上,由于命名参数只是从新的ruby2哈希表示法派生语法,你仍然可以混合使用:
params = { named: 'Param1', :'old-style' => 'Param2' }
,因此:
doc.rect x: 0, y: 0, :'stroke-width' => 3
它只是语法糖,里面是一个众所周知的老好哈希。顺便说一下,没有办法省略包含\W
s的密钥的哈希火箭。
答案 1 :(得分:0)
这是不可能的。连字符在标识符中不合法。
考虑一下:您如何知道a-b
是表示标识符a-b
还是a
减去b
?