- 浏览: 761883 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
使用trait可以让不用的类型实现同一个行为,定义函数的默认实现.接口抽象,OOP范式抽象,函数式范式抽象均基于trait来完成.同时trait也保证了这些抽象几乎都是运行时零开销.
Rust一共提供了5个trait,都被定义在标准std::marker模块中.它们分别是
1.Sized trait:用来标识编译期中确定大小的类型
2.Unsized trait:实验特性?用来标识动态大小类型(DST)
3.Copy trait:用来标识可以按位复制其值的类型
4.Send trait:用来标识可以跨线程安全通信的类型,可以安全地在线程间传递值,也就是说可以跨线程传递所有权
5.Sync trait:用来标识可以在线程间共享引用的类型
Rust中冒号代表集合的"包含于"关系,而加号则代表交集
impl<T:A+B> C for T,为所有T(属于A和B的交集)实现Trait C
给i32实现Add
一个结构体实现2个trait
Rust一共提供了5个trait,都被定义在标准std::marker模块中.它们分别是
1.Sized trait:用来标识编译期中确定大小的类型
2.Unsized trait:实验特性?用来标识动态大小类型(DST)
3.Copy trait:用来标识可以按位复制其值的类型
#[derive(Copy,Clone)] struct MyStruct;
4.Send trait:用来标识可以跨线程安全通信的类型,可以安全地在线程间传递值,也就是说可以跨线程传递所有权
5.Sync trait:用来标识可以在线程间共享引用的类型
Rust中冒号代表集合的"包含于"关系,而加号则代表交集
impl<T:A+B> C for T,为所有T(属于A和B的交集)实现Trait C
struct Person{ name :&'static str, age:i32, } use std::fmt::*; impl Debug for Person{ fn fmt(&self,f:&mut Formatter) -> Result{ write!(f," {{ name:{},age:{} }}",self.name,self.age) } } fn testTrait(){ let p = Person{name:&"zs",age:20}; println!("person:{:?}",p) } person: { name:zs,age:20 }
给i32实现Add
trait Add<T,Output> { fn add(self,t:T) -> Output; } impl Add<i32,i32> for i32{ fn add(self,t:i32) -> i32{ self + t } } impl Add<i32,u32> for u32{ fn add(self,i:i32)-> u32{ self + (i) as u32 } } fn main() { let a:i32 = 1; let s = a.add(3); let u:u32 = 2; let s2 = u.add(4); }
一个结构体实现2个trait
trait Page{ fn set_page(&self,p:i32){ println!("Page Default:{}",p); } } trait PerPage{ fn set_perpage(&self,num:i32){ println!("Per Page:{}",num); } } struct MyPage{ page:i32, } impl Page for MyPage{} impl PerPage for MyPage{} fn testPage(){ let p1 = MyPage{page:1}; p1.set_page(2); p1.set_perpage(3); } Page Default:2 Per Page:3
pub trait Fly{ fn fly(&self)->bool; } #[derive(Debug)] struct Duck; #[derive(Debug)] struct Pig; impl Fly for Duck{ fn fly(&self)->bool{ return true; } } impl Fly for Pig{ fn fly(&self)->bool{ return false; } } fn fly_static(s:impl Fly+Debug) -> bool{ s.fly() } fn can_fly(s:impl Fly+Debug)->impl Fly{ if s.fly(){ println!("{:?} can fly",s); }else{ println!("{:?} can't fly",s); } s } fn test_fly(){ let pig = Pig; let pig = can_fly(pig); let d = Duck; if d.fly(){ println!("{:?} can fly",d); } } Pig can't fly Duck can fly
发表评论
-
模式匹配
2022-03-27 17:35 170fn main() { //if let ... -
rust mutex
2022-03-27 12:14 215use std::sync::{Arc,Mutex}; ... -
rust channel
2022-03-27 11:58 236use std::sync::mpsc; use std ... -
rust智能指针
2022-03-26 12:31 217Box,Rc,RefCell都是不可变借用,只不过RefCel ... -
test框架
2022-03-25 10:18 225#[derive(Debug)] struct Rect ... -
lifeCycle
2022-03-24 14:10 159fn longest<'info>(x: &a ... -
hashmap
2022-03-24 11:11 168use std::collections::HashMap ... -
rust map
2020-08-18 16:02 499fn test_map(){ let a=[1, ... -
rust call
2020-08-13 10:27 341fn call<F>(clousure:F) ... -
rust闭包
2020-08-12 11:00 257返回闭包 fn returns_closure() -&g ... -
rust cell
2020-08-06 11:47 225fn test_cell(){ use std: ... -
rust引用记数
2020-08-06 11:10 320fn test_ref(){ use std:: ... -
rust内存泄漏
2020-08-03 10:20 454原因主要有三种: 1.线程崩溃,析构无法调用 2.使用引用记数 ... -
rust as类型转换
2020-07-24 10:34 581fn testAs(){ let a = 1u3 ... -
rust 线程 spawn
2020-07-24 10:03 298use std::thread; use std::ti ... -
rust println!
2020-07-20 11:09 341fn testPrintln(){ printl ... -
rust 范型
2020-07-15 20:00 270fn testOption(){ let i : ... -
rust 优先队列BinaryHeap
2020-07-15 09:22 851Rust提供的优先队列是基于二叉最大堆实现的 fn te ... -
rust set
2020-07-15 09:23 486HashSet<K>和BTreeSet<K& ... -
rust map
2020-07-15 09:23 318BTreeMap是有序的,HashMap是无序的 fn ...
相关推荐
https://blog.csdn.net/weixin_47560078/article/details/143573536 博客源码
3. Rust trait系统:Rust学习笔记Day 7-12讲述了Rust的trait系统,包括trait的定义、trait的实现、trait的继承、trait的约束规则等。 4. Rust智能指针:Rust学习笔记Day 13-15讲述了Rust的智能指针,包括Box、Cow等...
在Rust编程语言中,`trait`是一种强大的特性,它定义了一组方法,可以被不同的类型实现。`manual_call_rust_trait_function`这个主题显然关注的是如何手动调用实现了特定trait的函数。在这个场景中,我们将深入探讨...
### Rust基础关键字详解 #### 一、引言 Rust 是一种系统级编程语言,以其高效、可靠且安全的特点著称。它旨在提供强大的性能同时确保内存安全性,使其成为开发高性能系统软件的理想选择。Rust 的关键字是构成其...
trait-set : 稳定 Rust 上的 trait 别名地位:项目信息:支持稳定的 Rust 上的特征别名。描述这个 crate 提供对trait aliases 的支持:Rust 编译器已经支持的一个特性,但还不稳定。这个想法很简单:将一组特征组合...
1、有两个并发概念内嵌于语言中:std::marker中的Sync和Send trait。 2、通过Send允许在线程间转移所有权 (1)Send标记trait表明类型的所有权可以在线程间传递。几乎所有的Rust类型都是Send的,但是例外:例如Rc是...
trait PrettyPrint { fn format(&self) -> String; } ``` 这个特型定义了一个 `format` 方法,任何实现了 `PrettyPrint` 特型的类型都需要提供该方法的实现。 **2.3 实现特型** 接下来,我们可以为具体类型实现...
Rust 语言和 Trait Rust 语言是 Mozilla 员工 Graydon Hoare 的私人项目,2009 年 Mozilla 开始赞助这个项目,并在 2010 年首次揭露了它的存在。Rust 1.0 于 2015 年 5 月 15 日发布,现在 Rust 由 Mozilla 支持,...
第六章介绍了 Rust 的 trait 系统,包括 trait 的定义、trait 的实现、trait 的继承等。 第七章讲解了 Rust 的泛型编程机制,包括泛型类型、泛型函数、泛型 trait 等。 第八章介绍了 Rust 的宏编程机制,包括宏的...
Rust程序设计语言的升级迭代中,还包括了新的`impl Trait`语法的引入,这在第十章有所体现。`impl Trait`语法简化了类型说明,允许在函数签名中使用`impl Trait`来代替复杂的泛型类型,从而简化了泛型编程的复杂性。...
Rust是一种系统编程语言,专注于安全、速度和并发性。它由Mozilla研究院发起,由Graydon Hoare设计,并于2010年首次发布。Rust语言的设计目标是提供对内存安全和数据竞争的保证,同时保持C和C++级别的性能。 Rust的...
远程特征对象 一个简单而强大的 Rust 远程方法调用库,基于 Rust trait 对象。 请参阅。执照获得许可Apache 许可证,版本 2.0( 或 ) MIT 许可证( 或 ) 在您的选择。贡献除非您明确声明,否则您有意提交以供您...
6. **trait**:Trait是Rust中的接口定义,允许为不同类型的对象定义方法。`Self`关键字在trait中用于引用实现该trait的类型。Rust标准库(std)提供了许多预定义的trait,可以方便地进行类型操作。 7. **宏(Macros...
### 通过例子学Rust知识点总结 #### 一、Rust简介与特点 - **安全性**:Rust通过严格的内存安全规则确保程序不会出现常见的内存安全问题,如空指针引用、野指针等。 - **速度**:Rust语言在性能上与C和C++相当,...
从上面提供的内容来看,这本书涵盖了Rust编程语言的方方面面,从最基础的语法到如何组织代码、使用标准库,再到更高级的主题,比如宏、特性(trait)、泛型编程等。对于Rust的每个概念,书籍都通过具体的代码示例来...
同时,trait(特质)和泛型提供了元编程能力。 7. **并发编程**:Rust的并发模型基于所有权和线程局部状态,通过通道、Mutex(互斥锁)和Arc(原子引用计数)等工具,安全地实现了多线程和异步编程。 8. **标准库*...
- **泛型、Trait 与生命周期**:这部分内容介绍了 Rust 中的高级概念,包括泛型、Trait 和生命周期。这些概念使得 Rust 代码更加灵活和可重用。 - **测试**:这部分内容介绍了 Rust 的测试框架,包括如何编写测试、...
3. 트rait:Rust语言中有trait的概念,trait是指类型的行为。 4. 错误处理:Rust语言中有多种错误处理机制,包括Result和Option等。 5. 并发编程:Rust语言支持并发编程,包括async和await关键字。 三、高阶知识 1...
Rust 中用于嵌入式设备的实验性设备端 USB 堆栈。 此板条箱仍在开发中,不应视为生产就绪,甚至不兼容 USB。 UsbDevice 对象代表一个复合 USB 设备,是应用程序实现者最重要的对象。UsbDevice 结合了许多 ...
而“Debug”和“Display”部分则分别展示了如何通过`Debug`和`Display`两个trait来定制类型输出。 在“Testcase: List Formatting”中,学习者可以找到如何将向量格式化为列表形式输出的例子,这是学习集合类型使用...