Chcę napisać funkcję której jako paramter podaję tablicę a ona oblicza sumę wszystkich elementów.
irb(main):001:0> def wyr(*tab)
irb(main):002:1> sum=0
irb(main):003:1> sum = sum + tab.map(&:to_i)
irb(main):004:1> end
=> nil
irb(main):005:0> wyr(1,2,3,4)
TypeError: Array can't be coerced into Fixnum
from (irb):3:in `+'
from (irb):3:in `wyr'
from (irb):5
from /usr/bin/irb:12:in `<main>'
irb(main):006:0>
Wiecie co robie źle, jak przejść przez wszystkie elementy tablicy? I czy dobrze konwertuje?
[quote=kham][quote=phocke]def wyr *tab
tab.map(&:to_i).inject(0){|initial, current| initial + current }
end
wyr 1,2,3,4
[/quote]
def sum *tab
tab.reduce(:+)
end
No i przede wszystkim to nie przekazujesz do tej funkcji tablicy.
wyr 1,2,3 <- przekazanie listy argumentów
wyr [1,2,3] <- przekazanie tablicy[/quote]
No i jest okej, jeśli chce podliczać argumenty, to *tab złączy je w tablicę. Problem nastąpi, jeśli jako argument przekaże tablicę. Wtedy będzie tablica argumentów z tablicą.