[解決済み] インスタンス変数の値をその名前で取得する
2022-12-09 02:21:31
質問
一般に、文字列で指定した名前のオブジェクトへの参照を取得するにはどうすればよいのでしょうか。
具体的には、私はパラメータ名のリストを持っています(メンバー変数 - 動的に構築されるので、私はそれらを直接参照することはできません)。
各パラメータはオブジェクトであり、また
from_s
メソッドを持つオブジェクトです。
のようなことをしたいのですが(もちろんうまくいきませんが・・・)。
define_method(:from_s) do | arg |
@ordered_parameter_names.each do | param |
instance_eval "field_ref = @#{param}"
field_ref.from_s(param)
end
end
どのように解決するのですか?
最も慣用的な方法としては
some_object.instance_variable_get("@#{name}")
を使う必要はありません。
+
または
intern
Ruby はこれをうまく処理します。しかし、もしあなたが他のオブジェクトに手を伸ばし、そのivarを引き出すことに気づいたら、カプセル化を壊している可能性が高いです。
もしあなたが明示的にivarにアクセスしたいのであれば、正しいことはそれをアクセサにすることです。次のように考えてみてください。
class Computer
def new(cpus)
@cpus = cpus
end
end
この場合、もしあなたが
Computer.new
とすると、強制的に
instance_variable_get
を使うことになります。
@cpus
. しかし、もしあなたがこれをやっているなら、おそらくは
@cpus
を公開することでしょう。あなたがすべきことは
class Computer
attr_reader :cpus
end
これで
Computer.new(4).cpus
.
を再び開くことができることに注意してください。
任意の
を開き、プライベートの ivar をリーダーにすることができます。アクセッサは単なるメソッドなので、以下のようなことができます。
Computer.new(4).send(var_that_evaluates_to_cpus)
関連
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] インスタンスメソッドをモンキーパッチする場合、新しい実装からオーバーライドされたメソッドを呼び出すことは可能ですか?
-
[解決済み] Rubyのクラス名を取得する方法を教えてください。
-
[解決済み】現在実行中のメソッドの名前を取得する
-
[解決済み】RubyにあってPythonにないもの、またその逆は何ですか?
-
[解決済み】クラスが与えられたら、インスタンスがメソッドを持っているかどうか確認する(Ruby)
-
[解決済み] Rubyでメソッド名を持つ文字列からメソッドを呼び出す
-
[解決済み] Sinatraがファイルを変更するたびに自動で再読み込みするようにするには?
-
[解決済み] メソッドから2つ以上の値を返す
-
[解決済み] Rubyで、selectとmapを組み合わせたArrayメソッドはありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] 現在の日時をDD/MM/YYYY HH:MM形式で取得するにはどうすればよいですか?
-
[解決済み] rvm use 2.0.0 --default を実行すると、"Warning! PATH is not properly set up" と表示される。
-
[解決済み] Ruby: 文字列の最初の文字を取得する方法
-
[解決済み] Herokuの基本的なアプリのロードに2秒かかるのはなぜですか?
-
[解決済み] Capybaraで要素の正確なテキストをマッチングして要素を見つける方法
-
[解決済み] RVMを使用してRubyのバージョンを変更するには?
-
[解決済み] 文字列内の複数の空白と改行を削除する
-
[解決済み] Rubyで文字列が正規表現にマッチするかどうかをチェックする最も速い方法?
-
[解決済み] RubyでDateTime.nowをUTCに変換するには?