Ruby DSL变量初始化
我试图复制Sinatra的功能。特别是类似DSL的部分,您可以在类的定义中定义路由。当我尝试运行persons DSL的我的版本时,我得到一个错误,Ruby DSL变量初始化,ruby,sinatra,dsl,Ruby,Sinatra,Dsl,我试图复制Sinatra的功能。特别是类似DSL的部分,您可以在类的定义中定义路由。当我尝试运行persons DSL的我的版本时,我得到一个错误,undefined method'您从未将@persons初始化为除nil以外的任何值。一个简单的解决办法是 class MyPersons < Persons reset! add_person 'Dr.', 'Bob' add_person 'Mr.', 'Jones' end 在睡了一个好觉,又在谷歌上搜索了一会儿之后,我终
undefined method'您从未将@persons
初始化为除nil以外的任何值。一个简单的解决办法是
class MyPersons < Persons
reset!
add_person 'Dr.', 'Bob'
add_person 'Mr.', 'Jones'
end
在睡了一个好觉,又在谷歌上搜索了一会儿之后,我终于找到了答案。Ruby中似乎有一个继承的
方法;在继承类时调用(duh)
实际上,这就是Sinatra在Sinatra::Base
中实现实例变量的方式
class Persons
class << self
def reset!
@persons = []
end
def add_person title, name
@persons << {
title: title,
name: name
}
end
def inherited child
child.reset!
end
end
end
class MyPersons < Persons
add_person 'Dr.', 'Bob'
add_person 'Mr.', 'Jones'
end
班级人员
第二部分是我的问题。如何在不调用子类中的方法的情况下初始化persons
?
class Persons
@@persons = []
class << self
def reset!
@@persons = []
end
def add_person title, name
@@persons << { title: title, name: name }
end
end
end
class MyPersons < Persons
add_person 'Dr.', 'Bob'
add_person 'Mr.', 'Jones'
end
class Persons
class << self
def reset!
@persons = []
end
def add_person title, name
@persons << {
title: title,
name: name
}
end
def inherited child
child.reset!
end
end
end
class MyPersons < Persons
add_person 'Dr.', 'Bob'
add_person 'Mr.', 'Jones'
end