Ruby получает все классы в модуле [duplicate]

Как описано другими, быстрое, а также эффективное решение пространства использует numpy (np) с его встроенной возможностью векторной манипуляции:

1. С Numpy

x = np.array([1,2,3])
y = np.array([2,3,4])
print x+y

2. С встроенными функциями

2.1 Lambda

list1=[1, 2, 3]
list2=[4, 5, 6]
print map(lambda x,y:x+y, list1, list2)

Обратите внимание, что map () поддерживает несколько аргументов.

2.2 zip и понимание списка

list1=[1, 2, 3]
list2=[4, 5, 6]
print [x + y for x, y in zip(list1, list2)]
43
задан the Tin Man 30 July 2015 в 21:13
поделиться

4 ответа

Foo.constants

возвращает все константы в Foo. Это включает в себя, но не ограничивается, имена классов. Если вы хотите только имена классов, вы можете использовать

Foo.constants.select {|c| Foo.const_get(c).is_a? Class}

Если вы хотите имена классов и модулей, вы можете использовать is_a? Module вместо is_a? Class.

52
ответ дан Matt Briggs 5 September 2018 в 10:17
поделиться

Если вместо имен констант вам нужны сами классы, вы можете сделать это следующим образом:

Foo.constants.map(&Foo.method(:const_get)).grep(Class)
30
ответ дан Jörg W Mittag 5 September 2018 в 10:17
поделиться

Это приведет только к возврату загруженных констант в заданное пространство имен, потому что Ruby использует ленивый подход к загрузке. Итак, если вы наберете

Foo.constants.select {|c| Foo.const_get(c).is_a? Class}

, вы получите

[]

, но после ввода:

Foo::Bar

вы получите

[:Bar]
11
ответ дан pisaruk 5 September 2018 в 10:17
поделиться

Короче нет. Однако вы можете показать все загруженные классы. Итак, сначала вам нужно загрузить все файлы классов в пространстве имен:

Dir["#{File.dirname(__FILE__)}/lib/foo/*.rb"].each {|file| load file}

, тогда вы можете использовать метод Jörg W Mittag для списка классов

Foo.constants. map (& amp; Foo.method (: const_get)). grep (класс)

7
ответ дан Silverdev 5 September 2018 в 10:17
поделиться
Другие вопросы по тегам:

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