在ruby中引用类方法并加载和迭代JSON
我对ruby非常陌生,但我需要为我正在从事的一个项目学习它。我得到了一些框架代码,需要在表单中加载JSON在ruby中引用类方法并加载和迭代JSON,json,ruby,Json,Ruby,我对ruby非常陌生,但我需要为我正在从事的一个项目学习它。我得到了一些框架代码,需要在表单中加载JSON def self.data path = 'data/spells.json' file = File.read(path) JSON.parse(file) end 这是一个类方法,我一直试图在类的另一个方法中引用它,比如 def names_with_same_first_letter spell_names = Array.new spells = data
def self.data
path = 'data/spells.json'
file = File.read(path)
JSON.parse(file)
end
这是一个类方法,我一直试图在类的另一个方法中引用它,比如
def names_with_same_first_letter
spell_names = Array.new
spells = data
spells.each do |spell|
if spell["Spell"].Lower
spell_names.push(spell["Spell"].Lower)
end
end
return spell_names
end
也许这只是语法问题,但这个方法是否返回JSON对象?
我还试着做了self.data.each和data.each,但我总是出错
另外,其他方法也可以很好地使用数据,例如
def self.random
new(data.sample)
end
def self.effects
data.map{|el| el["Effect"]}
end
我得到这个错误
undefined local variable or method `data' for #<Spell:0x007ff04e81c130>
or
undefined method `data' for #<Spell:0x007fdd7323a1d8>
未定义的局部变量或方法“data”#
或
未定义的方法“数据”#
名字的首字母相同
是一种实例方法,为了在其中使用类方法数据
,您必须使用self.class.data
您可以通过两种方式为类创建类方法def self.data
和def ClassName.data
。除此之外,所有方法都将是实例方法
要解决您的问题,请将
spells=data
更改为spells=self.class.data
在您的实例方法中names\u的首字母相同
数据定义在哪里?在实例方法中使用self.class.data
。@SebastianPalma:first code snippetayayayay,我什么也没说@Sergio。