Я не понимаю, почему я получаю NoMethodError, когда пытаюсь вызвать метод класса "addStudent". Я добавил self для перехода от экземпляра к методу класса и трижды проверил свой синтаксис, чтобы убедиться, что я имею в виду правильный объект.
Я выполнил простую установку как объекта школы, так и метода, и оба они относятся к одному и тому же экземпляру класса School. Вот код.
class School
attr_accessor :name, :location, :instructors, :students
attr_reader :ranking
@@SCHOOLS = []
def initialize(name, location, ranking, students, instructors)
@name = name
@location = location
@ranking = ranking
@students = students
@instructors = instructors
@@SCHOOLS << self
end
def self.setRanking= (ranking)
@ranking = ranking
end
def self.addStudent= (name, grade, semester)
@students << {:name => name, :grade => grade, :semester => semester}
end
def self.removeStudent(name)
@students.delete_if { |student_hash| student_hash[:name] == name }
end
end
school = School.new ("Happy Funtime School",
"NYC",
1,
[ {:name => "Marissa", :grade => "B"},
{:name=>"Billy", :grade => "F"},
{:name => "Frank", :grade => "A"},
{:name => "Sophie", :grade => "C"} ],
[
{:name=>"Blake", :subject=>"being awesome" },
{:name=>"Ashley", :subject=>"being better than blake"},
{:name=>"Jeff", :subject=>"karaoke"}
]
)
school.addStudent("Jesus", "Z", "Y")
ОШИБКА:
rb:114:in `<main>': undefined method `addStudent' for #<School:0x007fca64099ff8> (NoMethodError)
school
черезschool = School.new...
school
(нижний регистр) — это объект экземпляра, а не класс, поэтому ему нужны методы экземпляра, а не методы класса. - person SteveTurczyn   schedule 27.07.2014