Как я могу добавить пару ключ-значение в хеш без имени? - PullRequest
0 голосов
/ 08 ноября 2018

Это мой рубиновый файл с хэшем:

book.rb

class Book
  attr_accessor :title, :author, :language, :classification, :isbn, :book_id, :borrow_status



  def initialize(title, author, language, classification, isbn, book_id, borrow_status)
    @title = title
    @author = author
    @language = language
    @classification = classification
    @isbn = isbn
    @book_id = book_id
    @borrow_status = borrow_status
  end

  def bookid
    @book_id
  end

  def booklist
    @title = @title.split(/ |\_|\-/).map(&:capitalize).join(" ")
    @author = @author.split(/ |\_|\-/).map(&:capitalize).join(" ")
    @language = @language.capitalize
    @isbn.to_s
    @book_id.to_s

    {
        :Title => @title,
        :Author => @author,
        :Language => @language,
        :Classification => @classification,
        :ISBN => @isbn,
        :Book_ID => @book_id,
        :Status => @borrow_status,
    }
  end


end

, у меня уже есть пять пар ключ-значение для этого хэша,они находятся в файле ruby ​​с именем top.rb :

$books1 = Book.new("lonely planet: ireland","damian harper","english","tourism",9781786574459,1,"available")
$books2 = Book.new("ninteen eighty four","george orwell","english","literature",9781374677817, 2,"available")
$books3 = Book.new("japanese in 30 days","naomi ono","japanese","education",9787928365729,3,"available")
$books4 = Book.new("brand famous: how to get everyone talking about your business","linzi boyd","english","business",9780857084903,4,"borrowed")
$books5 = Book.new("SQL in 10 mins","ming zhong, xiaoxia liu","chinese","hi tech",9787115313980,5,"unavailable")

и для вывода результата используют метод ниже:

    def status
      bookstatus = gets.chomp.to_s
      if bookstatus == "status"
       puts "Status:" + "\n" + "#{$books1.booklist[:Book_ID]}: #{$books1.booklist[:Title]}: #{$books1.booklist[:Status]}"
       puts "#{$books2.booklist[:Book_ID]}:#{$books2.booklist[:Title]}: #{$books2.booklist[:Status]}"
       puts "#{$books3.booklist[:Book_ID]}:#{$books3.booklist[:Title]}: #{$books3.booklist[:Status]}"
       puts "#{$books4.booklist[:Book_ID]}:#{$books4.booklist[:Title]}: #{$books4.booklist[:Status]}"
       puts "#{$books5.booklist[:Book_ID]}:#{$books5.booklist[:Title]}: #{$books5.booklist[:Status]}"
   else
       puts "error"
end
end

Сейчас я собираюсь добавить еще немного значения, я позволю пользователю вводить информацию о книгах (например, title = gets.chomp.to_s) и создаю новую пару ключ-значение для книги.

Как я знаю, добавить новую пару ключ-значение в ruby ​​можно следующим образом:

my_hash = {:a => 5}
my_hash[:key] = "value"

Но у хэша в book.rb нет имени, я попытался дать ему имякак

book_list = {
        :Title => @title,
        :Author => @author,
        :Language => @language,
        :Classification => @classification,
        :ISBN => @isbn,
        :Book_ID => @book_id,
        :Status => @borrow_status,
    }

будет выводить ошибку.

Мой вопрос, я хотел бы знать, как я могу добавить новую пару ключ-значение в хеш вмой рубиновый файл, у которого нет имени?

Спасибо.

1 Ответ

0 голосов
/ 09 ноября 2018

Изменение метода списка книг на это решит вашу непосредственную проблему:

  def booklist
    @booklist ||= {
        :Title => @title.split(/ |\_|\-/).map(&:capitalize).join(" "),
        :Author => @author.split(/ |\_|\-/).map(&:capitalize).join(" "),
        :Language => @language.capitalize,
        :Classification => @classification,
        :ISBN => @isbn.to_s,
        :Book_ID => @book_id.to_s,
        :Status => @borrow_status,
    }
  end

Теперь вы можете сделать booklist[:Xyz] = 'xyz'.

У кода в вашем вопросе так много "Hello world!" ошибок, кажется, вам все еще нужно немного узнать об основах Ruby, таких как использование переменных, разница между @isbn, isbn, $isbn, ISBN или @@isbn и т. д. .

В Интернете есть лучшие учебники по "изучению рубина", чем я готов начать здесь, поэтому мой ответ, вероятно, не очень полезен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...