加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby:带参数的可恢复函数

发布时间:2020-12-17 03:26:04 所属栏目:百科 来源:网络整理
导读:我想要一个在 Ruby中保持本地状态的函数.每次我调用该函数时,我想返回一个结果,该结果既依赖于调用参数又依赖于函数的存储状态.这是一个简单的例子: def inc_mult(factor) @state ||= 0 # initialize the state the first time. @state += 1 # adjust the i
我想要一个在 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封装到自己的类中,因为您希望将其状态与其包含对象分开封装.这就是generator(yield语句)在Python和C#中的工作方式.

像这样简单的东西会这样做:

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

从哲学上讲,我认为你的目标是与Ruby作为消息的方法观点不相容,而不是与某种程度上独立的函数不相容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读