我有以下代码试图检查是否正在使用未使用的数组元素:请纠正我错在哪里。我打开myclass.css并遍历每一行并添加所有以数组中的#标签或点开头的选择器,之后我拆分数组元素并删除重复项。删除重复项后,我使用此列表检查它们是否在complied.js文件中使用,如果它们未被使用,我将添加到新数组。
list_selectors = []
file = File.open("myclass.css")
file.each_line do |line|
list_selectors << line.split(' {')[0] if line.start_with? '.' or line.start_with? '#'
end
while line = file.gets
puts line
end
i = 0
while i < list_selectors.length
puts "#{list_selectors[i]}"
i += 1
end
list = []
list_selectors.each { |x|
list.push(x.to_s.split(' '))
}
list_selectors = list.flatten
# puts "***************splitted ******************************"
puts list_selectors
# puts "*********** split before dot ************************"
list_selectors.map! { |e| e[/[.#].*/]}
puts list_selectors
# puts "**************remove duplicates ********************"
list_of_classes_ids = list_selectors.uniq
list_selectors.uniq!
puts list_selectors
# puts "^^^^^^^^^^^^^^^^^not found ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
for ic in 0..list_of_classes_ids.length
puts " #{list_of_classes_ids[ic]}"
end
selectors_not_found = []
while nf = File.readlines("compile.js")
if !list_of_classes_ids[ic]
selectors_not_found << nf
else
puts "Exists"
end
end
puts "////////*********************************////////////////"
puts selectors_not_found
请协助
当我运行上面的代码时,它会给出错误消息readline
:无法从clean.rb分配内存(NoMemoryError):44:<main>
答案 0 :(得分:0)
你的问题在这里:
while nf = File.readlines("compile.js")
if !list_of_classes_ids[ic]
selectors_not_found << nf
else
puts "Exists"
end
end
对于每次迭代,您将文件读取到新的字符串数组,将其添加到selectors_not_found
数组,然后再次打开文件(每次填充内存)... File.readlines
永远不会返回一个假的值,所以它一直持续到你的内存不足为止。
我不确定此代码的意图(例如ic
这里的值是什么?),但假设您想迭代文件中的行,第一步是:
File.readlines("compile.js").each do |nf|
if !list_of_classes_ids[ic]
selectors_not_found << nf
else
puts "Exists"
end
end
这段代码可能仍然不能正常工作,因为它没有检查任何合理的东西,但是你的代码应该停止在内存问题上失败......
<强>更新强>
如果您想要在list_of_classes_ids
中列出未出现在compile.js中的所有字词,请尝试执行以下操作:
compile_js = IO.read('compile.js')
selectors_not_found = list_of_classes_ids.compact.reject { |class_id| compile_js[class_id] }