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.
HTH,
Sebastian
···
--
NP: Depeche Mode - Barrel Of A Gun
Jabber: sepp2k@jabber.org
ICQ: 205544826
There are two problems with your code. The first is the use of print in the
to_s method. print displays its arguments on screen and returns nil. So, the
return value of the @cards.map expression is an array filled with nil
elements. The second problem lies in the fact that your to_s method returns an
array.
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.
I hope this helps
Stefano
···
On Saturday 14 June 2008, Andrés Suárez wrote:
Hi,
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}