I see this issue with the .each
method come up a lot so I thought we could take a closer look.
words = ["apple", "pear", "orange"]
def to_caps(words)
upcased_words = []
words.each do |word|
upcased_words << word.upcase
end
end
What does this method return? If you said, ["apple", "pear", "orange"]
, you’re right! But, why is this happening?
Since we are not explicitly using the return
keyword here, our method is implicitly returning the last expression evaluated. The last expression evaluated turns out to be words.each {...}
.
.each
will evaluate to the array it is called on so words.each {...}
will evaluate to words
and since that is the last expression evaluated, our method implicitly returns words
.
To return our upcased_words
we need to make that variable the last expression evaluated so our method implicitly returns it:
words = ["apple", "pear", "orange"]
def to_caps(words)
upcased_words = []
words.each do |word|
upcased_words << word.upcase
end
upcased_words
end