我有以下ruby类:
class Scheme
attr_reader :id, :uri, :labels, :in_schemes, :top_concepts
def initialize(id, uri, labels, in_schemes)
@id = id,
@uri = uri,
@labels = labels
@in_schemes = in_schemes
@top_concepts = Array.new
end
end
我有以下方法来遍历给定的目录,寻找包含一系列特定语言类别标签的文件(它们的名称如"01"、"01.01.00"等)(下面的示例):
def make_schemes(catdir)
concept_schemes = Array.new
Dir.foreach(catdir) do |file|
unless file == "." || file == ".."
id = file.gsub(/./,"").to_s
uri = "/unbist/scheme/#{id}"
labels = Array.new
in_schemes = Array.new
File.read("#{catdir}/#{file}").split(/n/).each do |line|
label = JSON.parse(line)
labels << label
end
if id.size > 2
in_schemes = ["/unbist","/unbist/#{id[0..1]}"]
else
in_schemes = ["/unbist"]
end
p "Making new concept scheme with id: #{id}"
concept_scheme = Scheme.new(id, uri, labels, in_schemes)
p concept_scheme
concept_schemes << concept_scheme
end
end
return concept_schemes
end
示例类别文件,名为"#{dir}/01"。每一行都是正确的JSON,但由于超出本问题范围的原因,整个文件不是。
{ "text": "ﻢﺳﺎﺌﻟ ﻕﺎﻧﻮﻨﻳﺓ ﻮﺴﻳﺎﺴﻳﺓ", "language": "ar" }
{ "text": "政治和法律问题", "language": "zh" }
{ "text": "political and legal questions", "language": "en" }
{ "text": "questions politiques et juridiques", "language": "fr" }
{ "text": "ПОЛИТИЧЕСКИЕ И ЮРИДИЧЕСКИЕ ВОПРОСЫ", "language": "ru" }
{ "text": "cuestiones politicas y juridicas", "language": "es" }
我得到的输出很奇怪。make_schemes方法中的id变量在构造新Scheme之前已正确设置,但Scheme初始化器似乎在某个地方混淆了,并且正在将整个变量集应用于对象的id变量。以下是上面示例的一些输出(为可读性添加了干净的换行符:
"Making new concept scheme with id: 01"
#<Scheme:0xa00ffc8
@uri="/scheme/01",
@labels=[{"text"=>"مسائل قانونية وسياسية", "language"=>"ar"}, {"text"=>"政治和法律问题", "language"=>"zh"}, {"text"=>"political and legal questions", "language"=>"en"}, {"text"=>"questions politiques et juridiques", "language"=>"fr"}, {"text"=>"ПОЛИТИЧЕСКИЕ И ЮРИДИЧЕСКИЕ ВОПРОСЫ", "language"=>"ru"}, {"text"=>"cuestiones politicas y juridicas", "language"=>"es"}],
@id=["01", "/scheme/01", [{"text"=>"مسائل قانونية وسياسية", "language"=>"ar"}, {"text"=>"政治和法律问题", "language"=>"zh"}, {"text"=>"political and legal questions", "language"=>"en"}, {"text"=>"questions politiques et juridiques", "language"=>"fr"}, {"text"=>"ПОЛИТИЧЕСКИЕ И ЮРИДИЧЕСКИЕ ВОПРОСЫ", "language"=>"ru"}, {"text"=>"cuestiones politicas y juridicas", "language"=>"es"}]],
@in_schemes=["/"],
@top_concepts=[]>
我在这里错过了什么?是什么原因造成的?我有一个不同类的构造函数,它可以很好地使用类似的逻辑。我很困惑。也许有一种方法会更好?
尝试修复:
@uri = uri,
至:
@uri = uri
照原样,你告诉Ruby:
@uri = uri, @labels = labels
正如我所读到的,这意味着你将labels
分配给一个uri, @labels
的数组,然后将该数组分配给@uri
。