0
我有一個名爲Table
的ruby類,我遍歷一個csv文件,爲每一行創建這個類的對象,如果這行的第一個元素還沒有被看到。隨機刪除Class'objects
下面是代碼:
require 'csv'
class Table
def initialize(name)
@name = name
@columns = {}
end
end
csv_tables = File.read("db_apm.csv")
csv_tables = CSV.parse(csv_tables, :headers => true)
csv_tables.each_with_index do |row, index|
# Check if object with the name present at row[0] has already been created
if ObjectSpace.each_object(Table).find { |object| object.instance_variable_get(:@name) == row[0] }.nil?
table = Table.new(row[0])
p row[0]
end
p ObjectSpace.each_object(Table).to_a.count
end
p "Final count"
p ObjectSpace.each_object(Table).to_a.count
CSV文件永遠不會改變,但我看到了一些奇怪的結果:
首先,每個循環重新開始結束前計數在腳本的同一個運行過程中爲0(我可以看到1,2,3,... 50,1,2,3)。
此外,腳本的每次運行之間的最終計數更改。我有時會得到17,或者我可以得到204等,這看起來很隨機。
我不明白爲什麼會發生這種情況,因爲文件沒有改變,而且代碼非常簡單。
下面是該文件的一個小摘錄:
LOG_RECHERCHE
LOG_RECHERCHE
LOG_RECHERCHE
LOG_RECHERCHE
LOG_RECHERCHE
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
SUIVI_SCRIPT_SQL
SUIVI_SCRIPT_SQL
SUIVI_SCRIPT_SQL
SUIVI_SCRIPT_SQL
VUE_COMPILE_RENCONTRE
VUE_COMPILE_RENCONTRE
VUE_COMPILE_RENCONTRE
VUE_COMPILE_RENCONTRE
VUE_COMPILE_RENCONTRE
VUE_COMPILE_RENCONTRE
對於這一點,最終計應該是4,我不知道將與文件的一小部分(最終計出現問題應該是整個文件大約200)。
ruby是否因某些原因刪除對象?
感謝您的回答。我知道GC,但是讓我感到驚訝的是,它並沒有爲每次運行刪除相同數量的對象 –