Просмотрите доступный рубин методов

В целях выполнить условную компиляцию, #if и #ifdef [почти 111] то же, но не совсем. Если Ваша условная компиляция будет зависеть от двух символов тогда #ifdef, то не будет работать также. Например, предположите, что у Вас есть два символа условной компиляции, PRO_VERSION и TRIAL_VERSION, у Вас могло бы быть что-то вроде этого:

#if defined(PRO_VERSION) && !defined(TRIAL_VERSION)
...
#else
...
#endif

Используя #ifdef вышеупомянутое становится намного более сложным, особенно заставляя #else часть работать.

я работаю над кодом, который использует условную компиляцию экстенсивно, и у нас есть смесь #if & #ifdef. Мы склонны использовать #ifdef/#ifndef для простого случая и #if каждый раз, когда два или больше символа являются оценкой.

11
задан scottd 14 December 2009 в 17:00
поделиться

5 ответов

Существует несколько методов:

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

Обновление

  1. Чтобы отделить методы объекта от всех унаследованных методов, вы можете:

    obj.methods (false)

  2. As Tempus упомянутые в комментариях, следующая команда очень полезна для получения текущих методов объекта отдельно от унаследованных методов объекта (базового класса):

    obj.methods - Object.methods

23
ответ дан 3 December 2019 в 02:01
поделиться

Вы можете передать true для методов, если вы хотите игнорировать методы, определенные в суперклассах:

obj.methods(true)
obj.public_methods(true)
obj.private_methods(true)
obj.protected_methods(true)
obj.singleton_methods(true)

Или, если вы хотите удалить только наиболее распространенные методы, определенные в классе Object , вы хотите добавить либо - Object.methods , либо - Object.instance_methods , в зависимости от того, является ли obj классом или экземпляром класса.

4
ответ дан 3 December 2019 в 02:01
поделиться

Я также хотел бы отметить, что obj.methods не возвращает отсортированные имена методов, поэтому вы можете сделать obj.methods.sort .

3
ответ дан 3 December 2019 в 02:01
поделиться

Если у вас запущен интерпретатор Ruby, .methods покажет доступные методы для объекта. В Eclipse, когда я набрал File. ничего не происходило, пока я не выполнил команду Content Assist (CTRL + пробел). На тот момент я получил список методов.

3
ответ дан 3 December 2019 в 02:01
поделиться

Вы можете вызвать File.methods в интерактивном интерпретаторе Ruby, чтобы увидеть все доступные методы. Я не уверен, есть ли какой-то способ в IDE, который вы используете, поскольку я не использовал его раньше.

2
ответ дан 3 December 2019 в 02:01
поделиться