1

なぜ@variablesクラスで必要なのですか?彼らはどのような価値を追加しますか? これについてはオンラインで何も見つかりませんでしたが、間違った用語を探しているのかもしれません。これを調べることができるオンラインのリソースはありますか? ありがとう!

car.rb

class Car
  attr_accessor :make, :model

  def initialize(make = '')
    @make = ''
    @model = ''
  end
end
4

5 に答える 5

2

これらの変数はインスタンス変数と呼ばれます。クラスのすべてのインスタンスには、これらの変数の独自のコピーがあります。

あなたの例では、クラス Car のすべてのインスタンスに独自のメーカーとモデルを持たせたいと考えています。

次の例に注意してください

car1 = Car.new("Toyota", "Carola")
car2 = Car.new("Mitsubishi", "Lancer")

car1 と car2 の両方に、それぞれ専用のmakeとがありmodelます。Ruby インタープリターにこれを行うように指示する方法は、@ を使用することです。

于 2013-03-19T01:31:39.013 に答える
1

これが ruby​​ でインスタンス変数を定義するための構文です。

于 2013-03-19T01:28:17.183 に答える
1

インスタンス変数は、クラスの各インスタンスのすべての領域で使用できます。

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 の基礎を学ぶための素晴らしい無料コースがいくつかあります。

于 2013-03-19T01:38:57.473 に答える
0

オブジェクトは、実世界のオブジェクトと同じように、動作とプロパティを持っていると言われています。オブジェクトのプロパティは、インスタンス変数によって定義されます。また、@プレフィックスは、特定の変数がインスタンス変数/特性であることをルビーが伝える方法です。

彼らはどのような価値を追加しますか?

これらは、すべてのインスタンスメソッドからアクセスできる変数を作成するのに役立ちます。

あなたの例を分析しましょう

   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つの'@'インスタンス変数/インスタンス全体のスコープ。

  • 変数->いいえ'@'ローカル変数/それらが属するブロックのスコープ。

于 2013-03-19T07:51:16.857 に答える
-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="">

説明:ここでABでは、car1 と car2 の両方がインスタンス変数の同じコピーを使用していると考えるかもしれません。しかし、そうではありません。car1 と car2 をCDで出力すると、car1 と car2 がインスタンス変数に異なる値を保持していることがわかります@make。このファクト オブジェクトには、固有のインスタンス変数があります。

お役に立てれば。

乾杯!!

于 2013-03-19T01:39:14.003 に答える