Что означает эта конструкция в Ruby? - PullRequest
4 голосов
/ 28 января 2010

Приведенный ниже метод существует в самоцвете Красной Ткани.

Мой вопрос: что означает конструкция "to (RedCloth :: Formatters :: HTML)"? «to» не является ни методом ни в классе, ни в суперклассе (который является классом String).

Приветствия. Christian.

def to_html( *rules )
  apply_rules(rules)
  to(RedCloth::Formatters::HTML)
end

Ответы [ 3 ]

7 голосов
/ 28 января 2010

При поиске во всем источнике RedCloth значения def to, кроме того, что вы найдете пару методов, начинающихся с to, вы также найдете точный метод to в ext/redcloth_scan/redcloth_scan.rb.rl.

Здесь происходят две вещи. Во-первых, этот файл предварительно обработан Ragel . Но для этого вопроса вы можете спокойно проигнорировать этот факт и прочесть странный синтаксис в этом файле. Сосредоточьтесь на Рубиновых битах.

Во-вторых, класс RedCloth::TextileDoc равен , повторно откройте здесь. Это означает, что класс в этом файле и в lib/redcloth/textile_doc.rb совпадают. Таким образом, метод экземпляра to будет доступен для фрагмента кода, который вы цитировали.

0 голосов
/ 01 февраля 2010

Да, он определен в http://github.com/jgarber/redcloth/blob/master/ext/redcloth_scan/redcloth_scan.c.rl в строке 200 и присоединен к классу в 221.

to(RedCloth::Formatters::HTML) просто вызывает метод #to и передает его в класс форматера(второй аргумент в методе redcloth_to C; первый всегда должен быть self).

0 голосов
/ 28 января 2010

Может быть, это определено в объекте или в модуле ядра.

РЕДАКТИРОВАТЬ: это не так. Это определено в строке 220 этого файла http://github.com/jgarber/redcloth/blob/master/ext/redcloth_scan/redcloth_scan.c.rl

...