수업 내용에 대한 오해가 있거나 수업을 잘 사용하는 것처럼 보입니다.
클래스는 응용 프로그램의 내부 영역에서 고유 한 개념이나 항목을 나타내는 개체 유형입니다.
스택 오버플로와 같은 응용 프로그램의 내부는 User
, Question
및 Answer
개의 개체로 구성됩니다. 따라서 이들은 소스 코드에서 찾을 수있는 클래스 중 일부입니다.
개인이 Answer
이거나 개인이 같은 사람 User
은 클래스의 인스턴스입니다. 자체의 고유 한 데이터가 있으며 다른 데이터는 User
또는 Answer
이지만 동일한 동작 (예 : delete
또는 edit
)을 공유합니다.
Playlist
클래스가 있습니다. 논리적으로 이것은 Song
의 목록이어야합니다. Song
은 별도의 개념으로 자체 데이터 및 동작이 있으므로 별도의 클래스 여야합니다.
Playlist
은 현재 아무 것도하지 않으므로 Array
개체를 사용하는 것이 가장 좋습니다. 나중에이를 변경할 수 있도록, 당신은 같은 것을 할 수 있습니다 나중에
Playlist = Array
과 :
class Playlist
# extra behaviour when needed
end
을 Song
데이터의 세 가지가 있습니다
Ruby에서 우리는 attr_accessor
을 사용하여 setter와 getter를 처리 할 수 있습니다.
class Song
attr_accessor :name, :genre, :artist
end
클래스 및 변수 이름에 대소 문자가 구분됩니다. 그 실수는 p = playlist.new
입니다.
다음은 완전히 수정 된 코드 버전입니다. 가독성을 높이기 위해 일부 변수 이름을 변경했습니다.
또한 for
루프를 Ruby의 .times
메서드로 변경했습니다.이 메서드는 읽기가 쉽습니다.
마지막으로 을 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
를 사용할 수 있습니다. attr_accessor
이 암시 적으로 수행합니다.
class Duck
attr_accessor :name
def quack
"QUACK! My name is #{name}."
end
end
a_duck = Duck.new
a_duck.name = "Mr. Duck"
puts a_duck.quack
#=> QUACK! My name is Mr. Duck.
행운을 빕니다.