Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ruby中引用类方法并加载和迭代JSON_Json_Ruby - Fatal编程技术网

在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

我对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
  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。