2016-07-12 130 views
0

我已經幾個月的時間瞭解Ruby,現在我正在嘗試構建一個韓國/朝鮮/英語字典類型的東西。我給它提供了一個包含所有單詞的文本文件。Ruby:常量,模塊,哈希

到目前爲止我有:

module Dictionary 

    DICTIONARY = [] 

end 

class File 

    include Dictionary 

    def self.convert(file) 
    readlines(file).each do |line| 
     south, north, meaning = line.split(',') 
     DICTIONARY << { :south => south, :north => north, :meaning => meaning } 
    end 
    end 

end 

File.convert("dictionary.txt") 

Dictionary::DICTIONARY.sort_by { |word| word[:north] }.each do |word| 
    puts "#{word[:south]} is #{word[:north]} in North Korean. They both mean #{word[:meaning]}" 
end 

我的問題是:

1)它是不需要我做的陣列一個獨立的模塊? (我主要是試圖在模塊和類中進行混合試驗)

2)正在使用常數爲數組右移嗎?我想我的思考過程是我希望能夠從外部訪問數組,但說實話我並不真正知道我在做什麼。

在此先感謝。

+0

你是什麼意思「從外面」。你在建什麼類型的應用程序? –

+0

你可以用dictionary而不是'constant'創建一個'instance_variable' –

+3

我建議不要污染類File,因爲它是讀/寫各種文件的通用類,不僅僅是爲了你的特定用途,案件。 – Aetherus

回答

6

由於您的字典是從文件加載的,因此最好有一個類而不是一個模塊,這樣每個文件都可以被解析爲一個單獨的字典。

class Dictionary 
    attr_reader :content 

    def initialize 
    @content = [] 
    end 

    def self.load(path) 
    instance = new 
    File.open(path) do |f| 
     f.each_line do |line| 
     instance.content << %i(south, north, meaning).zip(line.split(',')) 
     end 
    end 
    instance 
    end 
end 

此外,你可以看到我沒有修補File類,因爲File不僅是創建詞典,但對各種文件操作。

+1

您應該從'self.load'方法返回'instance'變量。 –

+0

@LukasBaliak謝謝。代碼是固定的。 – Aetherus

+0

@Aetherus問題:你能解釋'instance = new'和'instance.content'部分嗎? – iswg