存在しないメソッドを呼び出すと、メソッドmethod_missing
の名前が表示されます。設定されていない変数にアクセスしようとすると、値は単にnil
.
nil インスタンス変数へのアクセスを動的にインターセプトし、アクセスされている変数の名前に基づいて値を返そうとしています。最も近いものは、PHP の__get
. Ruby に同等の機能はありますか?
存在しないメソッドを呼び出すと、メソッドmethod_missing
の名前が表示されます。設定されていない変数にアクセスしようとすると、値は単にnil
.
nil インスタンス変数へのアクセスを動的にインターセプトし、アクセスされている変数の名前に基づいて値を返そうとしています。最も近いものは、PHP の__get
. Ruby に同等の機能はありますか?
別の同様の質問に対する私の回答を参照してください。しかし、それができるからといって、それが良いアイデアであるとは限りません。賢明な設計は、一般にこの種の必要性を克服し、より読みやすく保守しやすいコードを生成できるようにします。
instance_variable_get
私が見る限り、PHP に最も近いと思われます__get
(私は PHP ユーザーではありませんが)。
関連するRubyソースコードを見ると、変数の唯一の「欠落」メソッドはconst_missing
定数用であり、インスタンス変数には何もありません。
Rubyでこれが可能だとは思いません。推奨される方法は、テンプレートで ''@user'' インスタンス変数ではなく ''user'' メソッドを使用することです。
これは、Ruby オブジェクトを外部で処理する方法と一致しています (''obj.user'' は ''@user'' を参照するメソッドですが、実際には ''@user'' 自体ではありません)。属性を持つ特別なロジックが必要な場合は、オブジェクトの内部または外部からアクセスしているかどうかに関係なく、メソッド (または method_missing) を使用することをお勧めします。
instance_variable_missingはありません(少なくとも私が知っていることです)しかし、なぜとにかくランダムに名前が付けられたインスタンス変数にアクセスするのですか?
スレッドがメソッド呼び出しを介してオブジェクト状態にすべてアクセスする場合(とにかくそうする必要があります)、これは必要ありません。
メソッドルックアップを台無しにせずに魔法のようなものを定義する方法を探しているなら、を使用したいかもしれませんconst_missing
。