Bueno, sigo con el curso de SAAS de Berkeley, y me ha dado por poner otro ejercicio (bueno, realmente es que llevo días sin escribir, estoy sin ideas y como acabo de hacerlo…). En este caso el último del «homework 1», que ha sido todo un alivio porque me esperaba algo jodidérrimo pero… no, para nada, es una chorrada tan gorda como hacer una clase con un método each que muestre el producto cartesiano de dos arrays:
class CartesianProduct
include Enumerable
def initialize(col1, col2)
@col1 = col1
@col2 = col2
end
def each
return to_enum unless block_given?
@col1.each do |x|
@col2.each { |y| yield [x, y] }
end
end
end
Como ya ves el constructor de la clase recibe dos arrays (col1 y col2) para inicializar el objeto, y por otra parte el método each recorre el primero cruzando cada elemento con todos los elementos del segundo (de ahí que haya un each dentro de otro each).
Fácil, rápido y barato… por decir algo.