我有一个班级" C"。我希望C运行一个接收块的方法A.然后我喜欢这个块来提供课程的上下文。
C.a do
b # runs main.b instead of C.b
end
目前,方法b
正在main
的上下文中运行。我希望它能在课程C
的上下文中运行
怎么办呢?
class C
class << self
def a(&block)
block.bind self # NOPE!
block.binding = self # NOPE!
yield # NOPE!
end
def b
end
end
end
PS。这与Rails路由的模式相同。
答案 0 :(得分:2)
您需要在类的上下文中评估块:
class C
class << self
def a(&block)
self.instance_eval(&block)
end
def b
puts "hello"
end
end
end
C.a do
b
end
=> "hello"