Какой monkeypatch создает частный метод split? - PullRequest
1 голос
/ 18 апреля 2011

Вопросы Ruby: закрытый метод, вызванный для 3: Fixnum и закрытый метод `split ', вызванный для nil: NilClass (NoMethodError) упоминание приватных методов split для Fixnum и NilClass объекты соответственно.

Является ли этот закрытый split метод псевдоключевым словом, запатентованным обезьянкой (например, print и puts)? Если так, что добавило это, и почему они использовали имя метода, которое уже существует для String?

1 Ответ

1 голос
/ 18 апреля 2011

Вы можете решить это самостоятельно (даже не читая другой ответ):

ruby-1.8.7-p330 :001> 3.method(:split)
#=> #<Method: Fixnum(Kernel)#split> 

Из моего потока поиска методов Ruby ( PDF версия ) видно, что методы для всех объектов заканчиваются на методах экземпляра Object… который сам включает в себя Kernel. Таким образом, все методы экземпляра Kernel (добавлено много случаев, чтобы быть доступными как удобные методы верхнего уровня) также заканчиваются как методы для каждого объекта.

Обратите внимание, что в версии 1.9+ это не так, поскольку Kernel#split удалено:

ruby-1.9.1-p378 :001> 3.method(:split)
#=> NameError: undefined method `split' for class `Fixnum'
#=>     from (irb):1:in `method'
#=>     from (irb):1
#=>     from /Users/phrogz/.rvm/rubies/ruby-1.9.1-p378/bin/irb:16:in `<main>'
...