変化する:
def initialize(showName)
:name = showName
end
に
def initialize(showName)
@name = showName
end
これを行うこともできます:
attr_accessor :name, :tvdbID
いくつかの例:
class Dog
def initialize(name)
@name = name
end
def show
puts "I am a Dog named: " + @name
end
def add_last_name(last_name)
@name = @name + " " + last_name
end
end
d = Dog.new "Fred"
d.show
d.add_last_name("Rover")
d.show
--output:--
I am a Dog named: Fred
I am a Dog named: Fred Rover
したがって、インスタンス変数はクラス内から自由にアクセスできます。ただし、クラスの外部から上記の例のインスタンス変数にアクセスすることはできません。
d = Dog.new "Fred"
puts d.name
--output:--
1.rb:17:in `<main>': undefined method `name' for #<Dog:0x000001010a5b48 @name="Fred"> (NoMethodError)
クラス外からインスタンス変数にアクセスする方法は次のとおりです。
class Dog
def initialize(name)
@name = name
end
def name #getter
@name
end
def name=(val) #setter
@name = val
end
end
d = Dog.new "Fred"
puts d.name
--output:--
Fred
これらのゲッターとセッターは入力するのが面倒です-特にインスタンス変数が10個ある場合は--そこでrubyはショートカットを提供します:
class Dog
def initialize(name, age)
@name = name
@age = age
end
attr_accessor :name, :age
end
d = Dog.new("Fred", 5)
puts d.name
puts d.age
d.age = 6 #calls age=() method
puts d.age
--output:--
Fred
5
6
ただし、クラスの先頭に attr_accessor 行を記述するのが通例です。