考虑到具有很少公共类型和获取方法的示例 struct ,什么时候以及为什么在Ruust中通过值或引用传递简单类型更好?
use chrono::{DateTime, Utc};
pub type Bytes = [u8; 16];
#[derive(Clone, Copy)]
pub struct Uuid(Bytes);
struct X {
v_str: String,
v_num: i32,
v_bool: bool,
v_uuid: Uuid,
v_date: DateTime<Utc>,
}
impl X {
pub fn v_str_ref(&self) -> &str {
&self.v_str
}
pub fn v_str_val(&self) -> String {
self.v_str.clone()
}
pub fn v_num_ref(&self) -> &i32 {
&self.v_num
}
pub fn v_num_val(&self) -> i32 {
self.v_num
}
pub fn v_bool_ref(&self) -> &bool {
&self.v_bool
}
pub fn v_bool_val(&self) -> bool {
self.v_bool
}
pub fn v_uuid_ref(&self) -> &Uuid {
&self.v_uuid
}
pub fn v_uuid_val(&self) -> Uuid {
self.v_uuid
}
pub fn v_date_ref(&self) -> &DateTime<Utc> {
&self.v_date
}
pub fn v_date_val(&self) -> DateTime<Utc> {
self.v_date
}
}
以我的理解,数字作为值传递更好,因为引用开销比仅通过值传递的性能更差,而且borrow 判断器规则会使通过引用传递变得不方便.
布尔人似乎遵循数字逻辑.
对于字符串,通过引用传递时性能似乎更好,并且当borrow 判断器处于某种程度时,克隆也很简单.
对于UUID和日期,我会假设应用与字符串相同的规则?