Ruby使用连字符命名参数

时间:2014-11-19 11:21:32

标签: ruby svg named-parameters

我经常需要生成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)

2 个答案:

答案 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