Acessando "iterados"?
|
|
Sendo @points uma array [ponto1, ponto2, ponto3] pra calcular a distancia desta “linha”: Eh necessario fazer distancia(ponto1 a ponto2) + distancia(ponto2 a ponto3). reduce(0) seria o certo nao? Mas como acessar o “next” da interation? |
|
|
Pelo que sei, conceitualmente o reduce trabalha sobre um único elemento de cada vez. Mas no seu caso, vc precisa do próximo elemento para o cálculo, e acho que o inject não permite isso. Não sei se é aplicável ao seu caso, mas talvez delegar o cáluclo para outra classe seja uma boa solução. |
|
|
Eh, exatamente o dilema… eu tenho que acessar o “proximo”. def calcula_dois(um, dois) dae eu envio os pares 1 e 2, 2 e 3, 3 e 4 .. etc |
|
|
Acho que assim vc só desvia do problema ;). Talvez uma solução bacana seja vc criar uma classe para lidar com tudo isso. Ela poderia “esconder” o seu array, e fazer tudo que vc espera da sua estrutura. Por exemplo:
Não sei se é uma solução adequada ao seu caso (até pq herdar de array vai te deixar amarrado), mas talvez seja útil caso mais responsabilidades possam ser atribuídas a essa classe. |
|
|
Isso ateh funciona, nem precisa herdar da array ( tás esquecendo mixins? =D )eh soh dar um include Enumerable. Na verdade soh muda o final, de @points pra self . |
|
|
A herança foi por pura preguiça, só pra ganhar as sobrecargas de operadores e outros métodos úteis da array para manipular os pontos da linha =). Não sei se entendi direito seu problema, mas eu tinha visualizado algo como: l = Linha.new É isso mesmo? |
|
|
Linha tem um array @points. Ela eh soh isso na vdd. @linha = Linha.from_points([[1,1][2,2][3,3]]) @linha.points.length @linha.distancia_em_metros |
|
|
Peço desculpas por responder milênios depois, mas acabei de chegar e tenho algumas sugestões. Já que o reduce e inject não fornecem o que desejas, que tal esse metodo, você pode adicionar na classe Array ou onde quiser. A chamada para ele seria Com algumas modificações podes já fornecer o objeto ao invés do índice, ou usar a idéia (yield) para o método que fornece a distancia que o Fernando passou. Por exemplo: e a chamada ficaria: |
|
|
Po Hugo, interessante isso kra. Vou experimentar. Valeu! |

