サーチ…


構文

  • 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