rust - 如何在 Rust 中为函数添加状态

标签 rust closures

Rust 有带状态的匿名闭包。我可以对命名函数做同样的事情吗?

(无效的伪代码)

fn counting_function()->i32 {
  let mut static counter = 0;
  counter = counter + 1;
  return counter.clone();
}

我知道我可以使用结构和函数/特征来做到这一点。而且我知道迭代器是正确的方法。但是抛开具有特征和迭代器的结构,我可以在不将任何负担(初始化结构)传递给调用者的情况下做到这一点吗?

最佳答案

这是一个使用原子的线程安全变体:

use std::sync::atomic::{AtomicUsize, Ordering};

fn counting_function() -> usize {
    static COUNTER: AtomicUsize = AtomicUsize::new(0);
    let result = COUNTER.fetch_add(1, Ordering::Relaxed);
    result
}

但我会说这实际上是一种代码味道。

关于rust - 如何在 Rust 中为函数添加状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55893888/

相关文章:

rust - 如何通过条件编译更改函数的限定符?

javascript - 闭包:逐行解释 "Javascript: Good Parts"示例?

javascript 闭包与类实例

javascript - 如何在闭包内处理 setInterval 中的 setTimeout

rust - 有没有办法否定 Option<bool>?

generics - 一般使用 Diesel 的查找或过滤器来执行删除

rust - 如何创建一个全局的、可变的单例?

rust - 如何使用堆引用惯用地构造结构?

javascript - 面向对象的 JavaScript 帮助

jquery - Spring Security登录成功后如何回调AJAX成功函数?