Могу ли я вызвать специальный метод для объекта с этой нотацией? - PullRequest
0 голосов
/ 16 января 2019

Это пример того, что я преследую:

def already_taken?
  # Magic goes here...
end

"Charlotte".already_taken?

Можно ли создать метод таким образом, чтобы я мог вызывать его непосредственно для объекта String, не изменяя сам класс String?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Если вы хотите добавить методы к любому классу (в данном случае String), без его исправления, вам следует рассмотреть возможность использования уточнений .

module StringRefinements 
  refine String do
    def already_taken?
      puts "yes!"
    end
  end
end

# in another file...
using StringRefinements
"Charlotte".already_taken?

Метод already_taken? будет доступен только в области, которая вызывает using StringRefinements, и больше нигде.

0 голосов
/ 16 января 2019

Вы можете исправить класс String с помощью специального модуля:

module MyStringPatch

  def already_taken?
    'yes'
  end

end

String.include MyStringPatch

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