なぜ@variables
クラスで必要なのですか?彼らはどのような価値を追加しますか? これについてはオンラインで何も見つかりませんでしたが、間違った用語を探しているのかもしれません。これを調べることができるオンラインのリソースはありますか? ありがとう!
car.rb
class Car
attr_accessor :make, :model
def initialize(make = '')
@make = ''
@model = ''
end
end
なぜ@variables
クラスで必要なのですか?彼らはどのような価値を追加しますか? これについてはオンラインで何も見つかりませんでしたが、間違った用語を探しているのかもしれません。これを調べることができるオンラインのリソースはありますか? ありがとう!
car.rb
class Car
attr_accessor :make, :model
def initialize(make = '')
@make = ''
@model = ''
end
end
これらの変数はインスタンス変数と呼ばれます。クラスのすべてのインスタンスには、これらの変数の独自のコピーがあります。
あなたの例では、クラス Car のすべてのインスタンスに独自のメーカーとモデルを持たせたいと考えています。
次の例に注意してください
car1 = Car.new("Toyota", "Carola")
car2 = Car.new("Mitsubishi", "Lancer")
car1 と car2 の両方に、それぞれ専用のmake
とがありmodel
ます。Ruby インタープリターにこれを行うように指示する方法は、@ を使用することです。
これが ruby でインスタンス変数を定義するための構文です。
インスタンス変数は、クラスの各インスタンスのすべての領域で使用できます。
car のインスタンスを作成するたびに、変数はその特定のインスタンスに固有です。
例えば
car1 = Car.new('Ford', 'Falcon')
car2 = Car.new('Toyota', 'Camry')
現在、car1 と car2 は @make と @model の異なるインスタンスを持っています。
を使用して変数をクラス変数として宣言すると@@make
、すべての Car がその変数にアクセスでき、変数が変更されるたびに全員が変更されます。
基本的に、クラス変数を使用すると、データの周りにいくつかの「壁」を置くことができます。
はattr_accessor
、呼び出しで 2 つのメソッドを作成します
def make=(value)
@make = value
end
def make
@make
end
これにより、@ なしでクラス内外からインスタンス変数を呼び出すことができます。
例えば
car1.make
戻り値
'Ford'
www.codecademy.com には、Ruby の基礎を学ぶための素晴らしい無料コースがいくつかあります。
オブジェクトは、実世界のオブジェクトと同じように、動作とプロパティを持っていると言われています。オブジェクトのプロパティは、インスタンス変数によって定義されます。また、@プレフィックスは、特定の変数がインスタンス変数/特性であることをルビーが伝える方法です。
彼らはどのような価値を追加しますか?
これらは、すべてのインスタンスメソッドからアクセスできる変数を作成するのに役立ちます。
あなたの例を分析しましょう
class Car
attr_accessor :make, :model #attr_accessor methods creates a getter method. car_instance.make and
#a setter method car_instance.make=(val), which otherwise you would have to do explicitly.
def initialize(make = '') #constructor
@make = '' #initializing your instance variables. I guess you meant @make = make here
@model = ''
end
end
これについてはオンラインで何も見つかりませんでしたが、間違った用語を検索している可能性があります。
うん、そうだった。
これを調べることができるオンラインのリソースはありますか?
うん、MatzによるRubyユーザーガイド
もう少し詳細
rubyでは、クラス内の変数のスコープは、変数名の最初の2文字によってコンパイラーによって識別されます。
@@variable_name->2つの'@'。クラス変数/クラスのすべてのインスタンスにわたるスコープ。例:あなたが作った車の総数を数えたい場合。
@variable->1つの'@'インスタンス変数/インスタンス全体のスコープ。
変数->いいえ'@'ローカル変数/それらが属するブロックのスコープ。
以下のコードを見てください。理解するために少し変更しました。
class Car
attr_accessor :make, :model
def initialize(make = '')
@make = make
@model = ''
end
end
car1 = Car.new("Toyota")
car2 = Car.new("Roxin")
p car1.instance_variables #<~~ A
p car2.instance_variables #<~~ B
p car1 #<~~C
p car2#<~~D
出力:
[:@make, :@model]
[:@make, :@model]
#<Car:0x1bc89e8 @make="Toyota", @model="">
#<Car:0x1bc8940 @make="Roxin", @model="">
説明:ここでAとBでは、car1 と car2 の両方がインスタンス変数の同じコピーを使用していると考えるかもしれません。しかし、そうではありません。car1 と car2 をCとDで出力すると、car1 と car2 がインスタンス変数に異なる値を保持していることがわかります@make
。このファクト オブジェクトには、固有のインスタンス変数があります。
お役に立てれば。
乾杯!!