2015-07-27 5 views
0

Я пытаюсь получить код для печати имени класса, а затем приветствия в той же строке. Например:Консольная печать назад

(DriveThru): Hi, welcome to Starbucks! What can I get started for you? 

Вот мой код:

module Order 
    def order_drink 
    "(#{self.class.name}): #{self.greeting}" 
    end 
end 

class Lobby 
    include Order 
    attr_reader :name 
    def initialize(name) 
    @name = name 
    end 
    def greeting 
    puts "Hi, welcome to Starbucks! How are you doing today #{self.name}?" 
    end 
end 

class DriveThru 
    include Order 
    attr_reader :name 
    def initialize(name) 
    @name = name 
    end 
    def greeting 
    puts "Hi, welcome to Starbucks! What can I get started for you #{self.name}?" 
    end 
end 

dt = DriveThru.new("Tom") 
lb = Lobby.new("Jessica") 

puts dt.order_drink 
puts lb.order_drink 

Когда я запускаю код, он печатает приветствие первых, разрывы строк, а затем печатает имя класса, как это:

"Hi, welcome to Starbucks! What can I get started for you?" 
(DriveThru): 

Что я делаю неправильно?

ответ

2

Ваша функция greeting выполняет команду puts. Из-за того, как работает Ruby (и большинство других языков программирования), метод order_drink будет оценивать содержимое метода greeting (вызывая оператор puts) прежде, чем вернуть свое собственное значение.

капают puts в начале каждой greeting функции, например:

class Lobby 
    include Order 
    attr_reader :name 
    def initialize(name) 
    @name = name 
    end 
    def greeting 
    "Hi, welcome to Starbucks! How are you doing today #{self.name}?" 
    end 
end 

Это заставит скрипт для вывода следующее:

(DriveThru): Hi, welcome to Starbucks! What can I get started for you Tom? 
(Lobby): Hi, welcome to Starbucks! How are you doing today Jessica? 

Тем не менее, было бы предпочтительнее чтобы добавить атрибут приветствия attr_reader и установить его значение в методе initialize (также называемом конструктором), например:

class Lobby 
    include Order 
    attr_reader :name, :greeting 
    def initialize(name) 
    @name = name 
    @greeting = "Hi, welcome to Starbucks! How are you doing today #{name}?" 
    end 
end 
+0

Awesome. Спасибо за то, что вы все это разработали. Полезно для таких людей, как я. – Zachary

Смежные вопросы