2016-07-12 9 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

'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

関連する問題