【发布时间】:2014-07-26 03:02:47
【问题描述】:
我不明白为什么在尝试调用类方法“addStudent”时会收到 NoMethodError。 我添加了 self 以从实例更改为类方法,并且我三重检查了我的语法以确保我引用了正确的对象。
我在 school 对象和方法上运行了一个简单的 put,它们都引用了 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)
【问题讨论】:
-
只是为了更清楚(或者可能更混乱)你创建的
schoolviaschool = School.new...school(小写)是一个实例对象,而不是一个类,所以它需要实例方法,不是类方法。
标签: ruby class variables nomethoderror