/ / Iterujte cez pole a správne využívajte výnos - rubín

Iterajte cez pole a používajte správne výnos - rubín

Snažím sa prísť na to, ako iterovať cez pole v Ruby a vykonávať akcie na základe hodnôt (a zistiť, ako používať yield, Nižšie je uvedený kód, ktorý mám zatiaľ, ale toto nefunguje. Môže mi niekto pomôcť nasmerovať správnym smerom?

each_odd("Odd")

def each_odd
array = [1, 2, 3, 4]
array.map {|x|
if (x % 2 != 0) do x = yield
else x = "Even"
end}
end

Očakávam, že sa tým vráti nasledujúce pole: ["Odd", "Even", "Odd", "Even"]

odpovede:

2 pre odpoveď č. 1

Ak chcete použiť výnos, musíte zložiť blok.

A môžete použiť {} bloky

each_odd { "Odd" } #=> ["Odd", "Even", "Odd", "Even"]

alebo do .. end bloky

each_odd do
"Odd"
end
#=> ["Odd", "Even", "Odd", "Even"]

A tu je návod, ako túto metódu implementovať

def each_odd
[1, 2, 3, 4].map do |x|
(x % 2 != 0) ? yield(x) : "Even"
end
end

Pri volaní yield vyhodnotí, čo je v bloku, a vráti ho do kontextu, taktiež môžete do bloku odovzdať parametre takto:

yield(x)

a potom by ste mohli urobiť niečo ako

each_odd { |num| "#{num} is Odd" } #=> ["1 is Odd", "Even", "3 is Odd", "Even"]

0 pre odpoveď č. 2

V takom prípade nemá zmysel sa vzdávať, jednoducho použite mapu

[1,2,3,4].map{|x| x % 2 == 0 ? "Even" : "Odd" }