I’m trying to obtain the cards of a Deck in a string like
“2s…KsAs2h…Ah2d…Ad2c…Ac”. The problem with the folowing code is
that in the end of the string appears “#Deck:0x2bb5880”. Why? Can I
avoid it?
class Deck
SUITS = %w{s d h c}
RANKS = %w{2 3 4 5 6 7 8 9 T J Q K A}
to_s needs to return a string otherwise puts will not use it. Your to_s
returns an array (as map returns an array) - an array of nils to be
precise
(because print returns nil).
Also to_s should not print anything to the screen.
You can solve both problems using the following definition of Deck#to_s:
def to_s @cards.join ’ ’
end
Since the elements of the @cards array are already strings, you don’t
need to
convert them. Instead, you have to convert the array itself to a string:
using
join will convert each element of the array to a string, then
concatenates
them inserting a space between each pair.