Rubyの取得メソッドと設定
目次
ゲッター法とは
Getterメソッドはインスタンス変数の値を取得するメソッドです.
Getterメソッドを使用せずに、インスタンス変数をインスタンス化したクラスの外部インスタンスインスタンスの値を取得できません.
以下が例です.
class Movie
def initialize(name)
@name = name
end
end
obj1 = Movie.new('Forrest Gump')
p obj1.name #=> undefined method `name' for #<Movie:0x007fecd08cb288 @name="Forrest Gump"> (NoMethodError)
ご覧の通り、価値はobj1
( name
) 外部から取得できませんMovie
クラス.クラスの外部でインスタンス変数の値を取得する場合、No Mothod Error .では、値の取得方法を見てみましょう
obj1
外Movie
ゲッターメソッドを持つクラス.あなたがここでしなければならないすべては
getter method
名前name
. ゲッターメソッドの名前は何でも構いませんが、インスタンス変数の名前のゲッターメソッドを指定するのは一般的です. class Movie
def initialize(name)
@name = name
end
def name
@name
end
end
obj1 = Movie.new('Forrest Gump')
p obj1.name #=> "Forrest Gump"
セッターとは何か
セッターはインスタンス変数の値を設定するメソッドです.
Setterメソッドを使用せずに、クラスの外部のインスタンス変数に値を割り当てることはできません.
クラス外でインスタンス変数の値を設定しようとすると、Ruby RiseNo Method Error クラスの外部インスタンスインスタンス変数の値を取得する場合は、getterメソッドを使用しないでください.
class Movie
def initialize(name)
@name = name
end
def name #getter method
@name
end
end
obj1 = Movie.new('Forrest Gump')
p obj1.name #=> "Forrest Gump"
obj1.name = 'Fight Club' #=> undefined method `name=' for #<Movie:0x007f9937053368 @name="Forrest Gump"> (NoMethodError)
クラス内で設定メソッドを定義することで、クラス外のインスタンス変数の値を設定できます.次のコードのような設定メソッドを定義できます.
class Movie
def initialize(name)
@name = name
end
def name #getter method
@name
end
def name=(name) #setter method
@name = name
end
end
obj1 = Movie.new('Forrest Gump')
p obj1.name #=> "Forrest Gump"
obj1.name = 'Fight Club'
p obj1.name #=> "Fight Club"
使用によってname=
, これで新しい値を割り当てることができますFight Club
to obj1
.アクセサーとは
Accessors
クラス内で明示的に定義せずに、取得メソッドと設定メソッドを作成する方法です.Rubyではアクセサの3種類があります.
attr_reader
与えられた属性に対して自動的にゲッターメソッドを生成します.attr_writer
自動的に指定された属性の設定メソッドを生成します.attr_accessor
与えられた属性に対する取得メソッドと設定メソッドを自動的に生成します.attr_reader
!下記のコードでご覧ください.
name
and year
外部から取得するMovie
どちらのクラスにもゲッターメソッドはありません.これはattr_reader
与えられた属性に対するgetterメソッドを生成します.class Movie
attr_reader :name, :year
def initialize(name, year)
@name = name
@year = year
end
end
obj1 = Movie.new('Forrest Gump', 1994)
p obj1.name #=> Forrest Gump
p obj1.year #=> 1994
第二に、どのように見てみましょうattr_writer
作品!上に述べたように.
attr_witer
指定した属性の設定メソッドを生成します.したがって、新しい値を割り当てることができますob1
Setterメソッドを明示的に記述せずにname
and year
!class Movie
attr_reader :name, :year
attr_writer :name, :year
def initialize(name, year)
@name = name
@year = year
end
end
obj1 = Movie.new('Forrest Gump', 1994)
obj1.name = 'Fight Club'
obj1.year = 1999
p obj1.name #=> "Fight Club"
p obj1.year #=> 1999
確かに少なくとも最後に.attr_accessor
何をするかattr_reader
and attr_writer
コードの1行だけで行う!指定された属性に対して自動的にgetterとsetter mehodを生成します.class Movie
attr_accessor :name, :year
def initialize(name, year)
@name = name
@year = year
end
end
obj1 = Movie.new('Forrest Gump', 1994)
obj1.name = 'Fight Club'
obj1.year = 1999
p obj1.name #=> "Fight Club"
p obj1.year #=> 1999
参考文献
Ruby Getters and Setters
How getter/setter methods work in Ruby
What is attr_accessor in Ruby?
rubylearning.com
Reference
この問題について(Rubyの取得メソッドと設定), 我々は、より多くの情報をここで見つけました https://dev.to/k_penguin_sato/ruby-getters-and-setters-1p30テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol