gpt4 book ai didi

ruby - 如何让在 block 中调用的一个方法能够查看在调用函数的上下文中设置的变量?

转载 作者:数据小太阳 更新时间:2023-10-29 08:47:31 25 4
gpt4 key购买 nike

我有一个定义方法的模块,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com