我是Ruby的新手,在写一个要求用户创建自己喜欢的歌曲的播放列表的程序时遇到了一个简单的问题!
class Playlist
array_songs = Array.new
print "How many songs do you want to add to your playlist? "
songs = gets.to_i
for i in 1..songs
print "Enter song #{i}: "
song = gets.chomp
print "Enter genre for song #{i}: "
genre = gets.chomp
print "Enter artist of song #{i}: "
artist = gets.to_i
p = playlist.new
p.set_song(song)
p.set_genre(genre)
p.set_artist(artist)
array_songs << p
end
end
puts "This is your current playlist: "
for song in array_songs
puts "#{song.get_song} #{song.get_genre} #{song.get_artist}"
end
所以基本上每次我运行它,它都不会工作,说我有未定义的方法等等......只是想要一些关于如何使这项工作的提示,以便在用户输入结束时歌曲,所有歌曲的结果将被打印!谢谢!
答案 0 :(得分:2)
你似乎对一个类是什么有误解,或者至少对如何使用它们有误解。
类是一种对象,它表示应用程序内部Universe中的不同概念或项。
Stack Overflow等应用程序的内部Universe由({1}},User
和Question
个对象组成。因此,这些是您可能在源代码中找到的一些类。
与此类似的个人Answer
或与您一样的个人Answer
是该类的实例。它有自己独特的数据,与另一个User
或User
的数据不同,但它共享相同的行为,例如Answer
或delete
。
您有一个名为edit
的班级。从逻辑上讲,这应该是Playlist
的列表。由于Song
是一个单独的概念,具有自己的数据和行为,因此它应该是一个单独的类。
因为Song
目前没有做任何事情,所以最好使用Playlist
对象。为了以后你可以改变它,你可以这样做:
Array
后来:
Playlist = Array
class Playlist
# extra behaviour when needed
end
有三个数据:
Song
name
genre
在Ruby中,我们可以使用artist
来处理setter和getter。
attr_accessor
注意类和变量名称的区分大小写。你用class Song
attr_accessor :name, :genre, :artist
end
犯了错误。
这是完全适应的代码版本。我更改了一些变量名以提高可读性。
我还将您的p = playlist.new
循环更改为Ruby的for
方法,我认为这种方法更容易阅读。
最后,我已将.times
的{{1}}更改为gets.to_i
,因为我认为它应该像其他人一样artist
。如果我错了,请改回来。
gets.chomp
最后,我知道这不适用于您的情况,但我觉得如果您还不知道这一点很重要:您可以使用String
向类添加行为。 Playlist = Array
class Song
attr_accessor :name, :genre, :artist
end
songs = Playlist.new
print "How many songs do you want to add to your playlist? "
number_of_songs = gets.to_i
number_of_songs.times do |i|
song_number = i + 1
print "Enter song #{song_number}: "
name = gets.chomp
print "Enter genre for song #{song_number}: "
genre = gets.chomp
print "Enter artist of song #{song_number}: "
artist = gets.chomp
s = Song.new
s.name = name
s.genre = genre
s.artist = artist
songs << s
end
puts "This is your current playlist: "
songs.each do |song|
puts "#{song.name} #{song.genre} #{song.artist}"
end
隐含地执行此操作。
def
祝你好运。