我有一个定义方法logged
的模块,它将为不同方法的结果添加前缀,say
:
module M
def logged(&block)
str = "logged: "
block.call
end
def say(value)
puts str + value
end
end
我希望能够在 class
block 的主体内使用 M
,如下所示:
class C
extend M
logged {
say "one"
say "two"
}
end
并得到:
# => "logged: one"
# => "logged: two"
本质上,我希望 say
能够访问 logged
中仅位于 logged
调用上下文中的值。因此,我宁愿避免实例变量、全局变量等等。
实现这一目标的正确方法是什么?
最佳答案
这是一种方法:-
module M
def logged(&block)
str = "logged: "
block.call(str)
end
def say(str, value)
puts str + value
end
end
class C
extend M
logged { |s|
say s, "one"
say s, "two"
}
end
关于ruby - 如何使 block 中调用的方法能够查看调用函数上下文中设置的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23261621/