rust 引用了Trait的实现,为什么还需要引入Trait 才能调用实现的方法

文章目录

        • 1. Rust中结构体实现trait与方法调用的关系
        • 2. 要调用trait方法,有几种方式:
        • 3. code

1. Rust中结构体实现trait与方法调用的关系

在Rust中,当一个结构体实现了某个trait时,不能直接通过结构体调用trait中定义的方法。这是因为:

  1. trait方法不是结构体的固有方法。它们是通过trait实现添加的,与结构体本身是分开的。
  2. Rust使用这种设计来避免命名冲突。如果多个trait为结构体定义了同名方法,直接调用会产生歧义。
  3. 这种设计增强了代码的明确性和可读性。通过指定trait名称,我们可以清楚地知道正在使用哪个trait的方法。
  4. 这种设计虽然看起来有些麻烦,但它提供了更大的灵活性和清晰度,特别是在处理复杂的trait关系时。
2. 要调用trait方法,有几种方式:

2.1 使用完全限定语法:

TraitName::method_name(struct_instance, ...)

2.2 将trait引入作用域,然后调用:

use TraitName;
struct_instance.method_name(...)
3. code
// 定义一个 trait
trait Printable {fn print(&self);
}// 定义一个结构体
struct Person {name: String,age: u32,
}// 为 Person 实现 Printable trait
impl Printable for Person {fn print(&self) {println!("Name: {}, Age: {}", self.name, self.age);}
}// 为 Person 实现自己的方法
impl Person {fn new(name: String, age: u32) -> Self {Person { name, age }}fn introduce(&self) {println!("Hi, I'm {} and I'm {} years old.", self.name, self.age);}
}fn main() {let person = Person::new(String::from("Alice"), 30);// 调用 Person 自己的方法person.introduce();// 调用 trait 方法的几种方式:// 1. 完全限定语法Printable::print(&person);// 2. 将 trait 引入作用域后调用use Printable;person.print();// 3. 如果没有命名冲突,可以直接调用person.print();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/34679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文献阅读(307)AccelWattch

题目:AccelWattch: A Power Modeling Framework for Modern GPUs时间:2021会议:MICRO研究机构:西北大学 本篇论文的主要贡献: 提出了一个GPU功耗模型,考虑了DVFS, thread divergence, intra-warp function…

关于PHP中删除JSON指定元素unset和array_splice的区别

1. unset(mixed $var, mixed ...$vars): void unset 不会改变原有索引顺序 ------------------------- 2. array_splice( array &$array, int $offset, ?int $length null, mixed $replacement [] ): array array_splice 删除后,会重新排序…

小程序人脸分析

公司的业务需求是用户在使用某个功能前,必须使用人脸识别,确保当前使用人是用户本人,防止某些功能乱用。后端用的是腾讯的人脸识别方案,这里只是前端的识别代码,保证人脸剧中,大小合适,有一个人…

四十二、 我国粤港澳大湾区个人信息出境标准合同如何签署和备?

《大湾区标准合同》是注册于(适用于组织)/位于(适用于个人)粤港澳大湾区内地部分,或者香港特别行政区的个人信息处理者(就内地而言,是指在个人信息处理活动中自主决定处理目的、处理方式的组织、…

4418 HMI 更换logo 图片

逻辑说明: HMI 的 kernel 没有提供源码,只是提供了镜像,如果客户需要更换自己的logo 的话, 可以使用提供的工具,将内核logo 打包起来。 我觉得这里的打包的过程应该是参考了, 4418 build_android.sh 脚…

自然语言处理课程论文

目录 1.背景介绍 1.1 文献介绍 1.2 研究背景 1.3 知识概述 1.3.1 机器翻译 1.3.2 attention机制与self-attention机制 2.数据来源与处理 2.1 数据集描述 2.2 数据处理 3. 模型架构 ​​​​​​​3.1 Positional Embedding ​​​​​​​3.2 Multi-Head Attention ​​​​​…

Go interface{}类型转换

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

华为HCIP Datacom H12-821 卷13

1.多选题 以下关于二层漫游和三层漫游的描述,以下说法正确的是? A、如果 STA 漫游时前后关联的 VLAN ID 相同则一定属于二层漫游 B、二层漫游是指客户端在同一子网内漫游 C、三层漫游是指客户端在不同子网间漫游 D、三层漫游前后 STA 关联的 AP 服务集上的 VL AN 必须相…

awk

1、定义 awk:按行取列 awk的默认分隔符:空格,tab键,有多个空格自动压缩成一个 2、awk的工作原理 根据指定信息逐行的读取文本内容,然后按照条件进行格式化输出 3、awk的选项 -F:指定分割符&#xff0…

SQL Server - ROLLUP、GROUPING、CUBE、GROUPING SET

文章目录 SQL Server - ROLLUP、GROUPING、CUBE、GROUPING SETROLLUP函数GROUPING函数GROUPING SET函数CUBE函数网上例子 写在前面:如果我们想要对分组之后的数据进行类似小计的计算,那么就需要使用到下面的函数 SQL Server - ROLLUP、GROUPING、CUBE、G…

EMANE版本的编译问题

EMANE最新版本编译问题 在Ubuntu 18.04上编译EMANE最新版本 在ubuntu 18.04上使用make deb编译EMANE1.5.1时,会卡在如下地方: make[6]: Entering directory ‘/home/xxx/emane-1.5.1/.debbuild/emane-1.5.1’ /bin/bash /home/xxx/emane-1.5.1/.debbui…

YOLOv10剪枝|模型轻量化实现方案 - 模型剪枝手把手教学

📚 专栏地址:《YOLOv10算法改进实战》 👉 独家改进,对现有YOLOv10进行二次创新,提升检测精度,适合科研创新度十足,强烈推荐 🌟 统一使用 YOLOv10 代码框架,结合不同模块来构建不同的YOLO目标检测模型。 💥 本博客包含大量的改进方式,降低改进难度,改进点包含【B…

互联网IT公司网站选择科技蓝,从来没让人失望过。

选择科技蓝色作为IT官网的主题颜色有以下好处: 专业感:科技蓝色通常与科技、创新和专业相关联,使用科技蓝色可以给访问者一种专业、可靠的印象,增强品牌形象,特别适合IT行业。技术感:科技蓝色给人一种科技…

微信小程序笔记 七!

页面配置 1. 页面配置文件的作用 小程序中,每个页面都有自己的 .json 配置文件,用来对当前页面的窗口外观、页面效果等进行配置。 2. 页面配置和全局配置的关系 小程序中,app.json 中的 window 节点,可以全局配置小程序中每个…

智心顾问:为心智障碍家庭带来温暖与专业支持

💙关爱从心开始 —— 理解心智障碍 在这个世界上,有这样一群特殊的群体——心智障碍者。他们通常伴随着个体认知、社会互动和学习能力的障碍。这些障碍可能源于遗传、环境或未知因素,但不应成为他们照护者获得信息和支持的阻碍。心智障碍者的…

「ClickHouse 极简教程」分布式下的 IN/JOIN 及 GLOBAL关键字

百度安全验证https://baijiahao.baidu.com/s?id1712073808973941124&wfrspider&forpc

C++结构体内存对齐规则

背景介绍 最近在使用Java语言写一个Java客户端,对接一个C/C语言编写的Server时,采用TCP协议进行通信,在将C结构体序列化的输出流转换为Java结构体时,需要按照结构体每个字段对应的字节长度截取字节流转换为Java类型,遇…

19 Shell编程之条件语句

目录 19.1 条件测试操作 19.1.1 文件测试 19.1.1 整数值比较 19.1.3 字符串比较 19.1.4 逻辑测试 19.2 if条件语句 19.2.1 if语句的结构 19.2.2 if语句应用示例 19.3 case分支语句 19.3.1 case语句的结构 19.3.2 case语句应用示例 19.1 条件测试操作 Shell环境根据命令执行后…

栈与队列 Leetcode 239 滑动窗口最大值

栈与队列 Leetcode 239 滑动窗口最大值 Leetcode 239 要点&#xff1a;1.能想到单调队列&#xff0c;积累技巧&#xff1b; class Solution{ public:class My_Monotonous_Queue{public:deque<int> Mono_queue;// 重写队列pop函数内部实现&#xff0c;移除队列最前方的…

内容安全复习 1 - 信息内容安全概述

文章目录 信息内容安全简介网络空间信息内容安全大模型 人工智能简介 信息内容安全简介 网络空间 网络空间是融合物理域、信息域、认知域和社会域&#xff0c;控制实体行为的信息活动空间。 上图展示了网络空间安全的结构。可以看到将网络空间划分为了网络域和内容域两个部分。…