2014-11-19 1 views
0

Мне часто приходится создавать SVG-файлы, и мне нравится делать это с помощью Nokogiri Ruby. Хорошая вещь о Nokogiri является то, что она позволяет создавать атрибуты, проходящие хэш их «функции», например, такИменованные параметры Ruby с дефисами

doc.rect(:x => 0, :y => 0, :width => 100, :height => 100) 

, который является большим. Есть некоторые признаки, которые имеют дефис: в этом случае вы можете просто воспользоваться удивительностями Руби и сделать что-то вроде

doc.rect(:x => 0, :y => 0, :width => 100, :height => 100, :stroke => 'black', 'stroke-width' => 3) 

и все относительно хорошо. Введите Ruby 2.0 и названные параметры. Я предпочитаю этот синтаксис, это немного более кратким и немного более мелким, что мне нравится. Однако единственный способ создать переносимые атрибуты теперь состоит в том, чтобы смешивать два подхода, при условии, что вы поместите «хэш» после именованных параметров (я предполагаю, что это должно быть так, но я не проверял). В любом случае, это уродливо.

Есть ли какой-то способ, которым вы мудрым люди, может вызвать воображение, чтобы создать переносимые атрибуты с использованием синтаксиса именованных параметров?

EDIT: Для уточнения, названные параметры выглядят следующим образом:

doc.rect(x: 0, y: 0, width: 100, height: 100) 
+0

Как вы используете синтаксис именованных параметров? не могли бы вы привести пример метода с именованными параметрами, который вы собираетесь его написать? –

+0

@ uri-agassi Я уточнил, редактируя вопрос. – Morpheu5

+1

Это не [именованные параметры] (http://stackoverflow.com/questions/15308163/named-parameters-in-ruby-2) (также известный как [аргументы ключевого слова] (http://brainspec.com/blog/2012/10/08/keyword-arguments-ruby-2-0 /), это новый (ish) [хэш-синтаксис] (http://www.shanison.com/2013/05/19/ruby-1-9 -2-хэш-синтаксис /), введенный в ruby ​​1.9.2 ... –

ответ

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.

+0

Это не то, что я спросил Я задал вопрос, как использовать именованные параметры, которые приводят к переносимым атрибутам XML через Nokogiri. Вторая строка, которую я вставил, уже работает, я подозреваю, что Ruby позаботится об этом. – Morpheu5

+0

': 'stroke-width'' может быть имя именованного параметра. Это символ, а '' stroke-width'' является строкой. Либо я не понимаю, в чем ваша проблема, либо вы не понимаете разницы между строками и символами. – mudasobwa

+0

Символ не является именованным параметром. Некоторое время оно использовалось, но Ruby 2.0 имеет собственные именованные параметры. См. Редактирование в моем исходном вопросе. – Morpheu5

0

Это невозможно. Дефисы не являются юридическими в идентификаторе.

Подумайте об этом: как вы знаете a-b означает ли идентификатор a-b или a минус b?

 Смежные вопросы

  • Нет связанных вопросов^_^