Эквивалент rb_str_modify () на языке Ruby - PullRequest
0 голосов
/ 15 марта 2010

Я пытался добавить метод в класс String. Этот метод должен изменять текущую строку (конечно, можно было бы написать не изменяющуюся версию, но я бы предпочел изменяющую). Я понятия не имел, как это сделать, и после некоторого поиска в Google я нашел метод rb_str_modify, который делает данную строку изменчивой. Это именно то, что мне нужно, но я не смог найти эквивалент в языке Ruby. Я что-то упустил или действительно нет возможности в самом языке?

1 Ответ

3 голосов
/ 15 марта 2010

Повторное открытие классов


Все классы в Ruby открыты для расширения, так что вы можете просто сделать это ...

Class String

    def my_new_method(args)

       # Some sort of modification to self

       self.replace "SOME CALCULATED VALUE"

    end

end

... где-то в вашем коде. Я несколько раз модифицировал строку в разных приложениях - обычно я просто помещаю изменения в один конкретный модуль, чтобы их можно было легко использовать повторно или удалять по мере необходимости.


Изменение отдельных объектов


Модификация класса в целом опасна, так как очень трудно определить все последствия - однажды я сломал Merb, изменив метод в классе String. Гораздо безопаснее модифицировать отдельные объекты. Это легко сделать в Ruby - вы используете ключевое слово extend . Вы определяете модуль, добавляете свою функцию и затем изменяете целевой объект. Этот пример ...

module Humor
  def tickle
    "hee, hee!"
  end
end
a = "Grouchy"
a.extend Humor
a.tickle  »  "hee, hee!"

взято из кирки

Chris

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