#!/usr/bin/env ruby
class C
def self.bparam(sym)
define_method sym do
yield
end
end
def initialize(x)
@x = x
end
bparam(:x) {@x}
bparam(:xx) {x + x}
end
a = C.new(10)
puts a.x
puts a.xx
true
./1.rb:15:in `block in <class:C>': undefined local variable or method `x' for C:Class (NameError)
from ./1.rb:6:in `block in bparam'
from ./1.rb:21:in `<main>'
Можно ли сделать так, чтобы yield выполнялся не в контексте класса С, а экземпляра a? Реальный bparam сложнее приведенного.