Как я анализирую вещи в Ruby?

Например, в Python, я могу сделать вещи как это, если я хочу получить все атрибуты на объекте:

>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'pydebug', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions']

Или если я хочу просмотреть документацию чего-то, я могу использовать функцию справки:

>>> help(str)

Там какой-либо путь состоит в том, чтобы сделать подобные вещи в Ruby?

22
задан Jason Baker 22 March 2010 в 13:57
поделиться

4 ответа

Конечно, это даже проще, чем в Python. В зависимости от того, какую информацию вы ищете, попробуйте:

obj.methods

и если вы хотите только методы, определенные для obj (в отличие от получения методов на Object также)

obj.methods - Object.methods

Также интересно сделать такие вещи, как:

obj.methods.grep /to_/

Чтобы получить переменные экземпляра, сделайте это:

obj.instance_variables

и для переменных класса:

obj.class_variables
40
ответ дан 29 November 2019 в 04:23
поделиться

Если у вас есть объект и вы хотите знать, на какие методы он реагирует, вы можете запустить obj.methods (и все уловки, упомянутые тендуками для этого результата)

Если у вас есть класс, вы можете запустить klass.methods , чтобы узнать, какие методы класса доступны, или вы можете запустить klass.instance_methods , чтобы узнать, какие методы доступны в экземплярах этого класса. . klass.instance_methods (false) полезен, потому что он сообщает вам, какие методы были определены классом, а не унаследованы.

Теперь есть способ получить текст справки для метода в Ruby, как это делает python.

1
ответ дан 29 November 2019 в 04:23
поделиться

Есть модуль под названием ObjectSpace , который включен в каждый объект, созданный в ruby. Он содержит все методы, которые помогут вам проанализировать текущий контекст процесса. В irb вы начинаете с контекста Object: Main , который является контекстом верхнего уровня для текущего сеанса irb. Затем вы можете сделать что-то вроде time = Time.now , а затем выполнить irb time , который перенесет вас в контекст этого объекта, и вы сможете проверить его изнутри, не вызывая ObjectSpace методов для этого объекта.

1
ответ дан 29 November 2019 в 04:23
поделиться

Если вам нужны все методы, которые вы можете вызвать на чем-то, чем использовать

>>> x.methods

Если вам нужна какая-то справочная информация, то вызовите справку перед ее классом

>>> help x.class

Help — это обертка для ri внутри irb.

5
ответ дан 29 November 2019 в 04:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: