Получить все локальные переменные или доступные методы из irb?

#ruby #reflection #irb

#ruby #отражение #irb

Вопрос:

Когда я захожу в irb и набираю несуществующую команду, я получаю сообщение об ошибке с указанием

 "undefined local variable or method 'my_method' for main:Object (NameError)"
  

Есть ли способ просто получить список доступных локальных переменных или методов? Это было бы действительно полезно для изучения ruby.

Ответ №1:

Ищите методы в ядре, объекте и модуле: например, local_variables, instance_methods, instance_variables.

Там есть другие замечательные методы. инспектировать — это еще один вариант.

Комментарии:

1. @sawa, inspect также покажет instance_variables (т. Е., если только он не был переопределен для класса, чтобы показывать что-то другое вместо этого)

2. кто-нибудь может объяснить, как этот парень получает приглашение: «показать все доступные 152) методы?» youtube.com/watch?v=J_9H1WPV2Ws#t=0m15s

3. @lukemh, введите [1,2]. в irb и нажмите TAB дважды. Функция в общем случае называется завершением / автозаполнением .

Ответ №2:

Отличные ответы.
По мере изучения они будут в вашем распоряжении:

 obj.private_methods 
obj.public_methods 
obj.protected_methods 
obj.singleton_methods
  

и

 MyClass.private_instance_methods 
MyClass.protected_instance_methods 
MyClass.public_instance_methods
  

Использование, подобное :

 obj.public_methods.sort
  

Также может упростить просмотр.

Существуют некоторые особые случаи, такие как

 String.instance_methods(false).sort
  

… предоставит вам только методы экземпляра, определенные в классе String, исключая классы, которые он унаследовал от любых предков. Как я полагаю, вы знаете, вы можете увидеть больше здесь:http://www.ruby-doc.org/docs/ProgrammingRuby / но это не так весело, как проверять и отражать в irb.

Приятного изучения —

Перри

Ответ №3:

Чтобы узнать переменные экземпляра, вы можете использовать Kernel#instance_variables , как указал Zabba.

Для методов, доступных на объекте, я использую my_object.methods - Object.methods , чтобы выяснить, какие неочевидные методы доступны для моего объекта. Это сужает список и значительно упрощает чтение.

Комментарии:

1. Вероятно, вам следует изменить это на my_object.methods.sort - Object.new.methods — в нынешнем виде вы вычитаете методы класса Object из списка my_object методов экземпляра.

2. Верно. Однако в Ruby Object.class is Class является экземпляром класса Class , поэтому в нем все еще есть методы из Object.methods .