Выход класса Ruby - PullRequest
       1

Выход класса Ruby

0 голосов
/ 01 января 2019

Я пробую свои силы в Ruby, ниже приведен код, который я пишу двумя различными способами, чтобы понять Ruby Classes.В первом блоке я использую метод доступа (комбинация чтения и записи) и хочу напечатать последнюю строку, так как «Властелин колец написан Толкином и имеет 400 страниц».Как я могу это сделать?Я понимаю, что добавление строки и целого числа приведет к ошибке.Я могу заставить их печатать на отдельных строках, просто я не могу получить их в предложении.

class Book
  attr_accessor :title, :author, :pages
end

book1 = Book.new()
book1.title = 'lord of the rings'
book1.author = 'Tolkien'
book1.pages = 400

puts book1.title
puts book1.author
puts book1.pages

#puts book1.title + " is written by " + book1.author + " and has " + book1.pages + " pages" <<<this errors out for known reason>>>

Второй кусок кода делает то же самое, но я использую переменную экземпляра и выяснил, как получить желаемый результат.Однако, пожалуйста, посоветуйте, если есть лучший способ сделать это?

class Novel
  def initialize(title, author, pages)
    @title = title
    @author = author
    @pages = pages
  end

  def inspect
    "#{@title} is written by #{@author} and has #{@pages} pages"
  end
end

novel1 = Novel.new('harry potter', 'JK Rowling', 300)
puts novel1.inspect

1 Ответ

0 голосов
/ 01 января 2019

В первом примере вы предоставляете доступ к необходимой информации и оставляете ее клиенту для форматирования вывода.Например, вы могли бы получить то, что хотели, добавив эту строку вместо вашей закомментированной строки.

puts "#{book1.title} is written by #{book1.author} and has #{book1.pages} pages"

Во втором примере вы «проталкиваете» этот код в класс Novel и доказываете метод дляпроизвести вывод, который вы хотите.Кстати, не используйте inspect в качестве имени метода, inspect - это уже определенный метод

Например, следующий код напечатает одну и ту же информацию дважды.

class Novel
  attr_accessor :title, :author, :pages  
  def initialize(title, author, pages)
    @title = title
    @author = author
    @pages = pages
  end

  def info
    "#{@title} is written by #{@author} and has #{@pages} pages"
  end
end

novel = Novel.new('harry potter', 'JK Rowling', 300)
puts novel.info
puts "#{novel.title} is written by #{novel.author} and has #{novel.pages} pages"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...