gpt4 book ai didi

rust - 什么是处理实际数据而不关心数据如何被保护/包装的惯用方式?

转载 作者:行者123 更新时间:2023-12-03 11:41:26 25 4
gpt4 key购买 nike

这是有效的代码:

use std::rc::Rc;
use std::sync::{Arc, Mutex};

fn foo(n: i32) {
println!("n = {}", n)
}

fn main() {
let a = 1;
let b = Rc::new(2);
let c = Mutex::new(3);
let d = Arc::new(Mutex::new(4));

foo(a);
foo(*b);
foo(*(c.lock().unwrap()));
foo(*((*d).lock().unwrap()));
}
我是否可以实现任何特征(或其他任何特征),以便函数调用可以简单地变为:
foo(a);
foo(b);
foo(c);
foo(d);
Rust惯用的处理实际数据而不关心数据的保护/包装方式是什么?

最佳答案

正如其他人指出的那样,忽略Mutex::lock的易错性是一个坏主意。但是,在其他情况下,可以使用 Borrow 使函数透明地接受拥有的值和引用:

use std::borrow::Borrow;
use std::rc::Rc;

fn foo (n: impl Borrow<i32>) {
println!("n = {}", n.borrow())
}

fn main() {
let a = 1;
let b = Rc::new (2);
let c = &3;

foo (a);
foo (b);
foo (c);
}
Playground

关于rust - 什么是处理实际数据而不关心数据如何被保护/包装的惯用方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66532918/

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