2011-02-06 9 views
1
# Stores <x, y, z> triplet in database. 
class Vector < ActiveRecord::Base 
composed_of :vector, :mapping => [%w(x x), %w(y y), %w(z z)] 
end 

# Immutable vector class. 
class Vector 
    attr_reader :x, :y, :z 

    def initialize(x, y, z) 
    @x, @y, @z = x, y, z 
    end 

    def add(v) 
    Vector.new(@x + v.x, @y + v.y, @z + v.z) 
    end 

    # etc. 
end 

どのように接続して区別しますか?私はそれだけのARベクトルを(とすべてのメソッドと操作をそこに置く)良い考えではないと信じて..私は行方不明のいくつかのパターンはありますか?私はDbVectorや何かに最初の名前を変更することができますが、より良い解決策があるのだろうかと思います。データベースVectorクラスとフレームワークVectorクラスを区別する方法は?

答えて

1

最初に:RubyにはすでにVector classが組み込まれています。私はそれを使うだろう。

名前を明確にする必要があります。私はむしろ名前空間に移ります。おそらくです。

+0

私は、モジュールを使用することになると思います。モジュールを使用して名前空間を使用するのがなぜ好都合なのかを気にする必要はありませんか?私は実際には2つの違いを理解していません。 – randomguy

+1

@randomguy - 名前空間は、同じ名前のクラス、変数などを何らかの並べ替えの階層に入れて曖昧さをなくすための一般的な用語です。モジュールは、名前空間の目的で使用できるRubyの再利用可能なコードのグループです。 Jakubの例では、 'DB :: Vector'は' DB'というモジュールの中で 'Vector'と呼ばれるクラスです。 Rubyはこれをトップレベルの 'Vector'クラスとは異なるクラスとして扱います。 –

+1

'class DB :: Vector'を書くことは' module DB;と書くことと同じです。クラスベクトル。 –

関連する問題