6

私はRubyに関する本を執筆していますが、著者は、本の前のセクションで使用したものとは少し異なる形式を使用してクラス初期化定義を記述しました。次のようになります。

class Ticket
  attr_accessor :venue, :date
  def initialize(venue, date)
    self.venue = venue
    self.date = date
  end
end

この本の前のセクションでは、次のように定義されていました。

class Ticket
  attr_accessor :venue, :date
  def initialize(venue, date)
    @venue = venue
    @date = date
  end
end

最初の例のようにsetterメソッドを使用することと、2番目の例のようにインスタンス変数を使用することの間に機能的な違いはありますか?どちらも機能しているようです。それらを混ぜ合わせても機能します:

class Ticket
  attr_accessor :venue, :date
  def initialize(venue, date)
    @venue = venue
    self.date = date
  end
end
4

1 に答える 1

10

セッターメソッドはによって定義されており、変数を設定するだけなのでattr_accessor、セッターメソッドを使用することと変数を直接設定することの間に違いはありません。

setterメソッドを使用することの唯一の利点は、後でsetterメソッドを変更して、変数の設定以外のこと(入力の検証や何かのログ記録など)を行う必要がある場合、initializeメソッドを変更しなくても、これらの変更の影響を受けることです。 。

于 2010-05-01T23:51:12.573 に答える