Рубиновая альтернатива классу << вещь - PullRequest
2 голосов
/ 09 июля 2009

Я хочу переписать несколько методов HighLine для настройки моей консоли, и на данный момент мой код выглядит следующим образом:

        cmd = ask("#{@prompt_label} #{@prompt_separator} ", @tab_completion_candidates) do |q|
            q.readline = true

            # rewriting the Question class to make it do what we want
            class << q
               HERE I WRITE MY CODE
            end
        end

Я бы хотел иметь возможность отделить свои изменения от основного файла консоли, поэтому предположим, что у меня есть класс Console :: Question, который содержит все изменения, которые я хочу сделать в HighLine :: Console. Я бы хотел быть в состоянии сделать что-то подобное:

Console::Question << q
end

Но, к сожалению, это не работает:)

Есть решение?

Спасибо за ваше время.

1 Ответ

3 голосов
/ 09 июля 2009

Если вы поместите свои изменения в модуль, а не в класс, тогда вы можете сделать

q.extend(YourModule)

например. переопределить valid_answer?

module QuestionCustomisations
  def valid_answer?
    # your code here
  end
end

q.extend(QuestionCustomisations)

Это применит ваши изменения только к экземпляру объекта, который передается в блок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...