ruby - Ruby 绑定上下文
问题描述
我有一个“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 路由的模式相同。
解决方案
您需要在类的上下文中评估块:
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"
推荐阅读
- c - ARM 汇编:如何交换数组元素以实现排序?
- list - Ansible - 读取文件,提取特定行,提取列并分配给变量
- python - 将月份名称转换为相应的数字。(Python)
- python - 安装 tensorflow 时遇到问题(是的,我有 python 3.7.9 64bit)
- python - 为什么 polyglot 不返回未音译的文本?
- javascript - 转换照片中的画布
- c++ - 仍然需要内联,因为编译器会自动内联
- python - 将文件复制到外部驱动器:目标目录路径无效
- html - 在 Bootstrap 中使用 d-flex 时如何获取他父母的 div 高度
- javascript - 为什么 new Date() 返回 GMT-0500(东部标准时间)?