I’m having difficulty understand the "self’ part in the solution of both student and course
How do we access a different class’s method without using subclass?
the solution is below and what exactly is self in student and course solutions?
class Student
attr_reader :courses, :first_name, :last_name
def initialize(first_name, last_name)
@first_name, @last_name = first_name.capitalize, last_name.capitalize
@courses = []
end
def name
“#{first_name} #{last_name}”
end
def enroll(course)
# ignore re-adding a course
return if courses.include?(course)
raise “course would cause conflict!” if has_conflict?(course)
self.courses << course
course.students << self
end
def course_load
load = Hash.new(0)
self.courses.each do |course|
load[course.department] += course.credits
end
load
end
def has_conflict?(new_course)
self.courses.any? do |enrolled_course|
new_course.conflicts_with?(enrolled_course)
end
end
end
Solution for Course:
class Course
attr_reader :department, :name, :credits, :time_block, :days, :students
def initialize(name, department, credits, days=nil, time_block=nil)
@name, @department, @credits, @days, @time_block =
name, department, credits, days, time_block
@students = []
end
def conflicts_with?(course2)
return false if self.time_block != course2.time_block
days.any? do |day|
course2.days.include?(day)
end
end
def add_student(student)
student.enroll(self) #What is this self?
end
end