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.