Из документов puts
:
Записывает новую строку после любой, которая еще не заканчивается последовательностью новой строки.
В Deck.deal
у вас есть puts "#{dealing.output_card}"
. Card#output_card
определяется как:
def output_card
puts "#{self.rank} of #{self.suit}"
end
Т.е., Card#output_card
уже печатает с новой строкой в конце. Возвращаемое значение этого метода, которое является возвращаемым значением puts
, которое в свою очередь для документов равно nil
, затем печатается в Deck.deal
, что приводит к печати пустой строки.
Короче говоря, вы печатаете дважды, а вторая puts
приводит к дополнительной строке.
Я предлагаю вам удалить puts
из Card
, так как он не должен иметь понятия о самой печати. Это работа Deck
. Я бы изменил Card#output_card
на Card#to_s
и просто возвратил строку, которую вы строите, а не puts
в ней. Тогда вы можете рассчитывать на то, что puts
вызовет #to_s
для печатаемого объекта.
class Card
# ...
def to_s
"#{self.rank} of #{self.suit}"
end
# ...
end
class Deck
# ...
def output
@cards.each do |card|
puts card
end
end
def deal
self.shuffle
puts @cards.shift
end
end