Ruby Language
instance_eval
サーチ…
構文
- object.instance_eval 'code'
- object.instance_eval 'code'、 'filename'
- object.instance_eval 'code'、 'filename'、 'line number'
- object.instance_eval {code}
- object.instance_eval {| receiver |コード}
パラメーター
パラメータ | 詳細 |
---|---|
string | 評価されるRubyソースコードを含みます。 |
filename | エラー報告に使用するファイル名。 |
lineno | エラー報告に使用する行番号。 |
block | 評価されるコードのブロック。 |
obj | 受信側は唯一の引数としてブロックに渡されます。 |
インスタンス評価
instance_eval
メソッドは、すべてのオブジェクトで使用できます。レシーバのコンテキストでコードを評価します。
object = Object.new
object.instance_eval do
@variable = :value
end
object.instance_variable_get :@variable # => :value
instance_eval
は、コードブロックの持続時間中、 self
からobject
設定しobject
。
object.instance_eval { self == object } # => true
レシーバは、唯一の引数としてブロックに渡されます。
object.instance_eval { |argument| argument == object } # => true
この点でinstance_exec
メソッドは異なりinstance_exec
。代わりに、引数をブロックに渡します。
object.instance_exec :@variable do |name|
instance_variable_get name # => :value
end
の実装者
多くの言語には、プログラマーがメソッド呼び出しの受信者を省略できるようにするwith
ステートメントがあります。
with
は簡単にinstance_eval
を使ってRubyでエミュレートできinstance_eval
:
def with(object, &block)
object.instance_eval &block
end
with
メソッドは、オブジェクト上のメソッドをシームレスに実行するために使用できます。
hash = Hash.new
with hash do
store :key, :value
has_key? :key # => true
values # => [:value]
end
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow