gpt4 book ai didi

Ruby:带参数的可恢复函数

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

我想要一个在 Ruby 中保持本地状态的函数。每次调用该函数时,我都希望返回一个结果,该结果取决于调用参数和函数的存储状态。这是一个简单的例子:

def inc_mult(factor)
@state ||= 0 # initialize the state the first time.
@state += 1 # adjust the internal state.
factor * @state
end

请注意,状态是第一次初始化,但后续调用会访问存储的状态。这很好,除了 @state 泄漏到周围的上下文中,这是我不想要的。

最优雅的重写方法是什么,这样 @state 就不会泄漏?

(注:我的实际例子多了 复杂,并初始化 状态很昂贵。)

最佳答案

您可能希望将 inc_mult 封装到它自己的类中,因为您希望将其状态与其包含对象分开封装。这就是生成器(yield 语句)在 Python 和 C# 中的工作方式。

像这样简单的事情就可以做到:

class Foo 
state = 0
define_method(:[]) do |factor|
state += 1
factor * state
end
end

从哲学上讲,我认为您的目标与 Ruby 将方法视为消息而不是某种程度上可以独立的函数的观点不相容。

关于Ruby:带参数的可恢复函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2308531/

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