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ď č. 1Ak 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" }