我不明白爲什麼我在嘗試調用類方法「addStudent」時遇到NoMethodError。 我添加了自我從一個實例更改爲一個類方法,我三重檢查我的語法,以確保我指的是正確的對象。類方法尚未評估NoMethodError
我已經對學校對象和方法都運行了一個簡單的提示,它們都指的是學校類的相同實例。這是代碼。
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.new創建'school' ...''school'(小寫)是一個實例對象,而不是類,所以它需要實例方法,而不是類方法。 – SteveTurczyn