Почему я получаю неопределенный метод title для # <Array: 0x81c918> (NoMethodError)? - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь получить album.title (в методе display_album).Всякий раз, когда я запускаю код через терминал, он говорит неопределенный метод title для #.Я думаю, что я поставил все экземпляры правильно.Я не уверен, что я скучаю.

Я попытался проверить, правильно ли я помещаю экземпляры, а также отладку с помощью метода p, чтобы проверить, не работают ли переменные экземпляра во всем классе.


$genre = ['Null', 'Pop', 'Classic', 'Jazz', 'Rock']

class Album 
    attr_accessor :title, :artist, :genre, :tracks
    def initialize(title, artist, genre, tracks)
        @title = title
        @artist = artist
        @genre = genre
        @tracks = tracks  
    end
end 

def read_albums()
    puts "write a file name"
    afile = gets.chomp 

    file = File.new(afile, "r")
    albums = Array.new()
    if file 
         i =0 
         count = file.gets.to_i
         while i<count 
                albums << read_album(file) 
            i +=1 
        end   
    file.close
    end 
    albums
end

def read_album(file)
    album_title = file.gets
    album_artist = file.gets
    album_genre = file.gets
    album_tracks = read_tracks(file)
    album = Album.new(album_title, album_artist, album_genre, album_tracks) 
    album       
end

def display_albums(albums)
    finished = false 
    begin
    selection = read_integer_in_range("choose the number", 1, 3)
    case selection 
    when 1 
        display_album(albums) 
    when 2
        display_genres
    when 3
        finished = read_boolean 'Are you sure to exit ? (enter yes if yes)'
    else   
        puts 'Please select again'
    end 
    end  
end

def display_album(albums)
    puts "the album title is" + albums.title.to_s
end

def main_menu 
finished = false 
begin 
selection = read_integer_in_range('please select the number between 1 and 5', 1, 5)
case selection
when 1
    albums = read_albums
when 2
    display_albums(albums)
when 3
    play_album
when 4
    update_album
when 5
    finished = read_boolean 'Are you sure to exit ? (enter yes if yes)' 
else
      puts 'Please select again'
end 

end until finished
end  

main_menu

Я ожидаю получить заглавное имя "Coldplay Viva la Vida или Смерть и все его друзья".

Полученное сообщение об ошибке: music_player.rb: 103: в display_album': undefined method title 'для # (NoMethodError)

1 Ответ

0 голосов
/ 20 мая 2019
def display_album(albums)
    puts "the album title is" + albums.title.to_s
end

Вы вводите массив альбомов вместо одного отдельного альбома. Измените его на:

def display_album(album)
    puts "the album title is" + album.title.to_s
end

И когда вы вызываете метод, убедитесь, что вы вызываете его только с одним альбомом в качестве аргумента, а не массива. Ошибка говорит вам, что вы вызывали метод 'title' для массива альбомов, когда вам нужно вызвать его только для одного элемента.

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