generics - 如何定义采用 Mutex<T> 的通用函数?

标签 generics rust

这个简单的函数锁定一个 f64 并更新值

use std::sync::Mutex;

fn bar() {
    let a = Mutex::new(1.0);
    let mut b = a.lock().unwrap();
    *b = 2.0;
    foo(a, 3.0);
}

我想将行为封装到一个函数中,但我不知道如何为 T 指定 where 子句

fn foo<T, V>(lockable_param: T, value: V)
// where
//    T: Mutex??,
{
    let mut lock = lockable_param.lock().unwrap();
    *lock = value;
}

最佳答案

你不需要那么多参数,只需要使用Mutex<T>T参数。我认为您将需要收到一个引用而不是一个值,因为您没有返回任何东西。这应该有效:

use std::sync::Mutex;

fn bar() {
    let a = Mutex::new(1.0);
    let mut b = a.lock().unwrap();
    *b = 2.0;
    foo(&a, 3.0);
}

fn foo<T>(lockable_param: &Mutex<T>, value: T) {
    let mut lock = lockable_param.lock().unwrap();
    *lock = value;
}

关于generics - 如何定义采用 Mutex<T> 的通用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53905472/

相关文章:

database - 返回在PostgreSQL中使用Rocket和Diesel创建的单个记录(Rust)

c# - 使用泛型进行显式转换

java - "? extends E"和 "T extends E"有什么区别?

c# - Autofac:使用非泛型接口(interface)注册泛型类型

variables - 是否有像 Option<T> 这样的 Rust 变量命名约定?

rust - 引用展开的属性失败 : use of partially moved value: `self`

rust - 当忽略某些值时,如何避免迭代器实现中不必要的昂贵操作?

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

c# - 通用委托(delegate)

c - 通用矩阵 : how to pass a type in a function argument