Ich betrachte diesen Code:obj.method (Argument)
class Student
attr_accessor :first_name, :last_name, :age
def initialize(first, last, age)
@first_name = first
@last_name = last
@age = age
end
def birthday
@age += 1
end
end
class ViewStudent
def initialize(student)
@student = student
end
def do_something
puts "Student name: #{@student.first_name} #{@student.last_name}"
end
end
class UpdateStudent
def initialize(student)
@student = student
end
def do_something
puts "What is the student's first name?"
@student.first_name = gets.chomp
puts "What is the student's last name?"
@student.last_name = gets.chomp
puts "Updated student: #{@student.first_name} #{@student.last_name}"
end
end
choices = [ViewStudent, UpdateStudent]
student = Student.new("John", "Doe", 18)
puts "Select 1 to view student or 2 to update student."
selection = gets.chomp.to_i
obj = choices[selection - 1]
obj = obj.new(student)
obj.do_something
In den letzten fünf Zeilen, ich verstehe, dass selection = gets.chomp.to_i
die Auswahlmöglichkeiten auf ganze Zahlen konvertiert, aber wie funktioniert das im Tandem mit obj = choices[selection - 1]
?
Ich bin mir auch nicht sicher, was obj = obj.new(student)
und obj.do_something
tun. Es sieht so aus, als ob eine lokale Variable gesetzt wird, um ein neues Objekt mit Student als Argument zu erstellen. obj
ist jedoch keine Klasse oder Methode zum Anrufen?
Ich kann auch feststellen, dass obj.do_something
ruft die Methoden für beide definiert ViewStudent
und UpdateStudent
die Auswahl gegeben.
Ich sah this, aber es beantwortet meine Frage nicht.
Vielen Dank! Ich habe den negativen/umgekehrten Weg vergessen, in einem Array zu zählen. Was obj = obj.new (Student) und obj.do_something ist das, wenn Sie meinen, indem Sie eine Instanz der ausgewählten Klasse erstellen? –
@AlexPho: Es ist gut, dass Sie sich jetzt daran erinnert haben, aber Rückwärtsindexierung hat damit nichts zu tun. Die '- 1' ist da, um 1-basierte Benutzereingabe (1 oder 2) in 0-basierten Array-Index (0 oder 1) zu konvertieren –
@SergioTulentsev Ich sehe, in der Theorie mit dieser Umwandlung zu (0 oder 1) würde es nicht möglich sein, eine dritte oder sogar vierte Wahl hinzuzufügen. Richtig? –