0

重複の可能性:
Ruby の attr_accessor とは?

サンプルコードは次のとおりです。

class User
  attr_accessor :name, :email

  def initialize(attributes = {})
    @name = attributes[:name]
    @email = attributes[:email] 
  end 

....

end

私がする時

example = User.new

空のユーザーを作成し、その名前と電子メールを次の方法で割り当てることができます

example.name = "something"
example.email = "something" 

私の質問は、なぜこれが機能するのですか?コンピュータは、example.name がクラスの @name 変数を意味することをどのように認識しますか? name と :name は異なると想定しています。ここのコードでは、example.name が :name シンボルと同等であることをコンピューターに明示的に伝えていません。

4

2 に答える 2

5

attr_accessorゲッターとセッターの2つのメソッドを作成します。渡すシンボルを使用して、メソッドとインスタンス変数の名前を作成します。ほら、このコード:

class User
  attr_accessor :name
end

このコードと同等です

class User
  def name
    @name
  end

  def name=(val)
    @name = val
  end
end
于 2013-01-14T15:31:16.793 に答える
5

attr_accessor :fieldattr_reader :fieldとを呼び出すのと同じattr_writer :fieldです。これらは、ほぼ次のようになります。

def field
  @field
end

def field=(value)
  @field = value
end

メタプログラミングの魔法へようこそ。;)

于 2013-01-14T15:31:26.473 に答える