6

instance_variable_setのドキュメントを調べていたところ、指定されたサンプル コードが次のようになっていることがわかりました。

obj.instance_variable_set(:@instnc_var, "value for the instance variable")

これにより、任意のクラスのインスタンス メソッドで @instnc_var として変数にアクセスできます。

:なぜ .の前にコロンが必要なのか疑問に思っています@instnc_var。コロンは何をしますか?

4

1 に答える 1

11

私の最初の本能は、instance_variable_setあなたがそれを何のために使っているのか本当に分かっていない限り、使わないように言うことです. これは基本的に、インスタンス変数の可視性をバイパスするためのメタプログラミングまたはハックのためのツールです。

つまり、その変数のセッターがない場合でも、 を使用instance_variable_setして設定できます。コードを制御してセッターを作成するだけの方がはるかに優れています。

インスタンス変数設定のニーズの大部分については、アクセサーを調べてみてください。これらは、インスタンス変数の getter と setter を「無料」で作成する慣用的な方法であり、これらの関数を作成する必要はありません。

本当に instance_variable_set が必要な場合は、最初の引数を、設定するインスタンス変数の名前であるシンボルにすることができます。コロンは Ruby 言語の一部であり、「シンボル リテラル」のようなものです。 を入力:fooすると、値 foo を持つシンボルが作成さ"bar"れます。コードに直接入力すると、値が「bar "。

于 2012-09-20T02:28:23.387 に答える