您的位置:首页 > 房产 > 建筑 > 河南省建设厅代建中心_专业网页设计价格_现在的seo1发布页在哪里_有了域名如何建立网站

河南省建设厅代建中心_专业网页设计价格_现在的seo1发布页在哪里_有了域名如何建立网站

2025/1/12 22:57:14 来源:https://blog.csdn.net/m0_37719524/article/details/143308779  浏览:    关键词:河南省建设厅代建中心_专业网页设计价格_现在的seo1发布页在哪里_有了域名如何建立网站
河南省建设厅代建中心_专业网页设计价格_现在的seo1发布页在哪里_有了域名如何建立网站

Rust中的元组结构体

  • 前言
  • 什么是元组结构体
    • 可否使用公开字段呢?
    • 有用的AsRef<T>
  • 总结:

前言

结构体和元组的概念C++,C# 以及其他的语言基本一致,且特征也都接近,简而言之,结构体每一个字段都有名字,且类型根据需要自己设置,而元组没有字段名字,访问时需要使用".0" “.1” ".n"等


什么是元组结构体

介于元组和结构体之间的数据类型,有名字,没有字段名,适合在一些其外部名称即能够表达出类型具体含义,而字段仅仅是值得保存,并且可为其实现impl。

rust 中的struct:

struct Data {
name : String,
age : u16,
...
}
impl Data {
...
}

rust中的元组:

let mut data : (i32,f64) = (10000,184.12);

rust 中的元组结构体:

struct Email(String);
impl Email{
...
}

这样的写法既表达了设计上的意图,又简化了写法。
机灵的小伙伴可能会考虑到,虽然我们这样设计有利于代码维护,但是像这样仅有一个字段的数据,如何合理的访问它呢(比如需要email地址向用户发送邀请时,使用方法一定是会需要取到内部值的)

可否使用公开字段呢?

struct Email(pub String);

不可以,虽然这样可以使得外部代码访问到内部字段,但同时也给了开发者篡改和出错的机会。

有用的AsRef

特征 std::convert::AsRef,提供了这样的能力:调用者可以读取值,但无权改变它。

使用Trait std::convert::AsRef 时,必须实现的函数:
fn as_ref(&self) -> &T //Converts this type into a shared reference of the (usually inferred) input type.

上述email即可做出如下实现:

impl AsRef< str > for Email {
fn as_ref(&self) -> &str {&self.0
}
调用时:
let email = Email(String::from("asdfasdfasdf@162.com"));
... email.as_ref() ...

总结:

如上实现,既可以保护字段的安全性,提高程序封装程度,又可以给到实际使用方访问的机会。


Ps: 一件事如果觉得有用,尽管细碎微小,划过不如记录。

如有勘误,敬请指出。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com