поиск метода в ядре ruby ​​в среде исполнения верхнего уровня - PullRequest
1 голос
/ 03 декабря 2010

Я понимаю в среде выполнения верхнего уровня, self - это некоторый предопределенный объект класса Object.

puts self.class.inspect #=> Object

А

puts self.class.ancestors.inspect #=> [Object, Kernel, BasicObject]

Но почему я не могу найти метод «пут», подобный этому?

puts self.class.instance_methods.include?(:puts) #=> false

Я ожидал true, потому что Kernel равно included в Object, может кто-нибудь сказать мне, почему он возвращает false?

решаемые

puts определен как метод частного экземпляра в Kernel.

Kernel.private_instance_methods.include?(:puts)  #=> true

Интересно, почему в документации по ядру ruby ​​есть список puts в списке методов общего экземпляра Kernel

1 Ответ

1 голос
/ 03 декабря 2010

Одной из причин этого является то, что

Kernel.instance_methods.include? :puts #=> false

и

self.private_methods.include? :puts #=> true

Я думаю, что puts объявлен закрытым в Object.

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