Как описано другими, быстрое, а также эффективное решение пространства использует 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)]
Foo.constants
возвращает все константы в Foo
. Это включает в себя, но не ограничивается, имена классов. Если вы хотите только имена классов, вы можете использовать
Foo.constants.select {|c| Foo.const_get(c).is_a? Class}
Если вы хотите имена классов и модулей, вы можете использовать is_a? Module
вместо is_a? Class
.
Если вместо имен констант вам нужны сами классы, вы можете сделать это следующим образом:
Foo.constants.map(&Foo.method(:const_get)).grep(Class)
Это приведет только к возврату загруженных констант в заданное пространство имен, потому что Ruby использует ленивый подход к загрузке. Итак, если вы наберете
Foo.constants.select {|c| Foo.const_get(c).is_a? Class}
, вы получите
[]
, но после ввода:
Foo::Bar
вы получите
[:Bar]
Короче нет. Однако вы можете показать все загруженные классы. Итак, сначала вам нужно загрузить все файлы классов в пространстве имен:
Dir["#{File.dirname(__FILE__)}/lib/foo/*.rb"].each {|file| load file}
, тогда вы можете использовать метод Jörg W Mittag для списка классов
Foo.constants. map (& amp; Foo.method (: const_get)). grep (класс)
blockquote>