継承 - ruby 配列




RubyクラスとStruct (2)

Structは、クラスを作成するためのRubyの略語です。 必要に応じてStructを使用すると、コードが簡単になります。 これについては、 https://www.rubytapas.com/2012/11/07/episode-020-struct/でよく議論されていhttps://www.rubytapas.com/2012/11/07/episode-020-struct/

私は、Structsを使ってクラス内の属性と動作をラップするコードベースを見てきました。 RubyクラスとStructの違いは何ですか? そして、どちらがもう一方の上で使用されるべきか?


構造体docsから:

構造体は、明示的なクラスを記述することなく、アクセサメソッドを使用して複数の属性をまとめてバンドルする便利な方法です。

Structクラスは、メンバとその値のセットを保持する新しいサブクラスを生成します。 各メンバーに対して、Module#attr_accessorと同様にリーダーとライターのメソッドが作成されます。

ですから、 Personクラスでname属性(読み書き可能)にアクセスできるようにするには、クラスを宣言するか、

class Person
  attr_accessor :name

  def initalize(name)
    @name = name
  end
end

またはStruct:

Person = Struct.new(:name)

いずれの場合も、私は次のコードを実行することができます:

 person = Person.new
 person.name = "Name"
 #or Person.new("Name")
 puts person.name

それを使うときは?

記述には明示的なクラスを記述することなくアクセス可能な属性のグループが必要なときにStructsを使用しています。

たとえば、XとYの値を保持するポイント変数が必要です。

point = Struct.new(:x, :y).new(20,30)
point.x #=> 20

いくつかの例:





ruby