这个简单的函数锁定一个 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/