Evaluating Inside a Binding
suggest changeRuby keeps track of local variables and self
variable via an object called binding. We can get binding of a scope with calling Kernel#binding
and evaluate string inside a binding via Binding#eval
.
b = proc do
local_variable = :local
binding
end.call
b.eval "local_variable" #=> :local
—``` def fake_class_eval klass, source = nil, &block class_binding = klass.send :eval, “binding”
if block class_binding.local_variable_set :_fake_class_eval_block, block class_binding.eval "_fake_class_eval_block.call" else class_binding.eval source end end
class Example end
fake_class_eval Example, <<-BLOCK def self.foo :foo end BLOCK
fake_class_eval Example do def bar :bar end end
Example.foo #=> :foo Example.new.bar #=> :bar ```
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents