Использование Ruby 2.2.1, как перечислять все методы (предпочтительнее Array of String names) класса, который определен только в том классе/файле, где include
и extend
отфильтровываются. Я хочу также отличать методы класса и экземпляра.Как перечислить все методы класса (не расширенные и вложенные методы)
В настоящее время я могу получить все неисследованные методы, используя MyClass.methods(false)
, но это все еще включает в себя методы, которые являются частью модуля include
.
Явное, скажем, у меня есть:
class MyClass < BaseClass
extend AnotherBaseClass
include MyModule
def foo
end
def bar
end
end
Я хочу получить:
somecodethatreturnssomething
#=> ['foo', 'bar']
# Not including BaseClass, AnotherBaseClass, and ModuleClass methods
UPDATE: ответ
@Wand Maker является правильным, когда я запускаю его в отдельная консоль irb. Тем не менее, у меня все еще есть проблема, что я включаю ActionView::Helpers::UrlHelper
в MyClass
. Я всегда получаю дополнительные методы: default_url_options?
, default_url_options=
, и default_url_options
. Я думал, что include ведет себя одинаково независимо от Rails или нет, поэтому я не ставил этот вопрос в Rails.
Я даже добавил byebug
в конце файла MyClass
, чтобы я мог проверить класс и запустить MyClass.singleton_methods(false)
или запустить MyClass.instance_methods(false)
. Но они все же включают эти три нежелательных метода.
Я могу удалить эти три дополнительных метода из массива вручную, поэтому я мог бы получить динамический список методов моего класса, но я просто боюсь, что в будущем мое приложение сломается, если есть обновление или что-то, что будет добавьте новые методы в класс (неосознанно).
UPDATE:
В 3 способа получить только добавлены в Rails 3 это казалось (проект я работаю), но не в Rails 4 (как я и @Wand Maker опробовал).
Это точный код (где я снял уже все, но по-прежнему получаю те же результаты/проблемы)
# lib/my_class.rb
class MyClass
include ActionView::Helpers::UrlHelper
def welcome
puts 'Hello Jules!'
end
def farewell
puts 'Goodbye Jules!'
end
end
byebug
Или я мог бы удалить этот файл: my_class.rb (и скопировать и вставить, что весь код rails console
)
Но, все еще получая ту же проблему.
FYI: Если я использую 'MyClass
@WandMaker Я обновил вопрос с помощью точного усеченного кода, где я все еще получаю три метода. –