Rust struct

Rust struct

  • 1.实例化需要初始化全部成员变量
  • 2.如果需要实例化对象可变,加上mut则所有成员变量均可变

Rust支持通过已实例化的对象,赋值给未赋值的对象的成员变量

#![allow(warnings)]
use std::io;
use std::error::Error;
use std::boxed::Box;
use std::convert::TryInto;
use std::cmp::Ordering;
use std::cmp::min;
use std::cmp::max;struct User {name: String,age: i32
}fn main() -> Result<(), Box<dyn Error>> {let u: User = User {name: String::from("sqs"),age: 12};print!("{} {} ", u.name, u.age);let b: User = User {name: String::from("sqssqs"),..u};print!("{} {}", b.name, b.age);Ok(())
}

定义结构体中的方法

#![allow(warnings)]
use std::io;
use std::error::Error;
use std::boxed::Box;
use std::convert::TryInto;
use std::cmp::Ordering;
use std::cmp::min;
use std::cmp::max;struct User {name: String,age: i32
}impl User {fn print(&self) {println!("{} {}", self.name, self.age);}
}fn main() -> Result<(), Box<dyn Error>> {let u: User = User {name: String::from("sqs"),age: 12};u.print();let b: User = User {name: String::from("sqssqs"),..u};b.print();Ok(())
}

修改成员变量

#![allow(warnings)]
use std::io;
use std::error::Error;
use std::boxed::Box;
use std::convert::TryInto;
use std::cmp::Ordering;
use std::cmp::min;
use std::cmp::max;struct User {name: String,age: i32
}fn main() -> Result<(), Box<dyn Error>> {let mut u: User = User {name: String::from("sqs"),age: 12};print!("{} {} ", u.name, u.age);u.name = String::from("sqssqs");u.age = 16;print!("{} {}", u.name, u.age);Ok(())
}

通过 借用 修改成员变量

#![allow(warnings)]
use std::io;
use std::error::Error;
use std::boxed::Box;
use std::convert::TryInto;
use std::cmp::Ordering;
use std::cmp::min;
use std::cmp::max;struct User {name: String,age: i32
}fn chageAge(u : &mut User){u.age = 10;
}fn main() -> Result<(), Box<dyn Error>> {let mut u: User = User {name: String::from("sqs"),age: 12};println!("{} {}", u.name, u.age);u.name = String::from("sqssqs");u.age = 16;println!("{} {}", u.name, u.age);chageAge(&mut u);println!("{} {}", u.name, u.age);Ok(())
}

通过 转移所有权 修改成员变量

#![allow(warnings)]
use std::io;
use std::error::Error;
use std::boxed::Box;
use std::convert::TryInto;
use std::cmp::Ordering;
use std::cmp::min;
use std::cmp::max;struct User {name: String,age: i32
}fn chageAge(mut u: User) -> User {u.age = 10;u
}fn main() -> Result<(), Box<dyn Error>> {let mut u: User = User {name: String::from("sqs"),age: 12};println!("{} {}", u.name, u.age);u.name = String::from("sqssqs");u.age = 16;println!("{} {}", u.name, u.age);u = chageAge(u);println!("{} {}", u.name, u.age);Ok(())
}

以下代码报错

#![allow(warnings)]
use std::io;
use std::error::Error;
use std::boxed::Box;
use std::convert::TryInto;
use std::cmp::Ordering;
use std::cmp::min;
use std::cmp::max;struct User {name: String,age: i32
}fn chageAge(mut u: User) -> User {u.age = 10;u
}fn main() -> Result<(), Box<dyn Error>> {   let mut u: User = User {name: String::from("sqs"),age: 12};println!("{} {}", u.name, u.age);u.name = String::from("sqssqs");u.age = 16;println!("{} {}", u.name, u.age);let b: User = chageAge(u);println!("{} {}", u.name, u.age);Ok(())
}

报错详情

编译出错!
error[E0382]: borrow of moved value: `u.age`--> /main.rs:30:31|
21 |     let mut u: User = User {|         ----- move occurs because `u` has type `User`, which does not implement the `Copy` trait
...
29 |     let b: User = chageAge(u);|                            - value moved here
30 |     println!("{} {}", u.name, u.age);|                               ^^^^^ value borrowed here after move|= note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)error: aborting due to previous errorFor more information about this error, try `rustc --explain E0382`.

原因

所有权已经从u给b导致u无法使用

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

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

相关文章

【NumPy】深入解析numpy中的 iscomplex 方法

&#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a; 我是云天徽上&#xff0c;一名对技…

下载文件流

export function downloadFile(file, name, type) { const link document.createElement(‘a’) link.href window.URL.createObjectURL(new Blob([file], { type: type })) link.target ‘_blank’ link.download name document.body.appendChild(link) link.click() docu…

Mujoco仿真【xml文件的学习 4】

在学习Mujoco仿真的过程中&#xff0c;mujoco的版本要选择合适。先前我将mujoco的版本升级到了mujoco-3.1.4&#xff0c;在运行act的仿真代码时遇到了问题&#xff0c;撰写了博客&#xff1a; Aloha机械臂的mujoco仿真问题记录-CSDN博客 下面在进行mujoco仿真时&#xff0c;统…

从0开发一个Chrome插件:开发Chrome插件的必要知识

前言 这是《从0开发一个Chrome插件》系列的第二篇文章,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件? 尽请期待~ Chrome 插件的基本结构 一个C…

Superset二次开发之PG数据库备份策略

背景:基于Superset项目3.0版本二次开发,线上运行之后,需要处理和维护后续的PG数据的备份,迁移,回滚,校验等环节 Superset 默认使用 PostgreSQL(简称 PG)作为其元数据数据库。这个数据库在 Superset 项目中扮演了关键角色: 存储元数据: PG 数据库存储 Superset 的所有…

十_信号3-可重入函数

如上图所示链表&#xff0c;在插入节点的时候捕获到了信号&#xff0c;并且该信号的自定义处理方式中也调用了插入节点的函数。 在main函数中&#xff0c;使用insert向链表中插入一个节点node1&#xff0c;在执行insert的时&#xff0c;刚让头节点指向node1以后(如上图序号1)&…

MySQL学习——获取数据库和表格的信息

如果忘记了数据库或表的名称&#xff0c;或者不确定给定表的结构&#xff08;例如&#xff0c;其列的名称&#xff09;&#xff0c;该怎么办呢&#xff1f;MySQL通过几个语句解决了这个问题&#xff0c;这些语句提供了有关它支持的数据库和表的信息。 你之前已经看过SHOW DATA…

linux系统下,mysql增加用户

首先&#xff0c;在linux进入mysql mysql -u root -p 然后查看当前用户&#xff1a; select user,host from user; 增加用户语句&#xff1a; CREATE USER 用户名host范围 IDENTIFIED BY 密码;

【操作系统】Linux、Windows各平台CoreDump机制实现详解

LinuxCoreDump机制是Unix/Linux操作系统中的一种功能&#xff0c;它允许在程序异常终止时&#xff0c;将程序的内存状态保存到一个文件中&#xff0c;这个文件通常被称为core文件。以下是CoreDump机制的原理和实现步骤&#xff1a; 信号触发&#xff1a;CoreDump通常由特定的信…

【C++】C++入门1.0

鼠鼠最近在学C&#xff0c;那么好&#xff0c;俺来做笔记了&#xff01; 目录 1.C关键字(C98) 2.命名空间 2.1.命名空间定义 2.2.命名空间的使用 3.C的输入&&输出 4.缺省参数 4.1缺省参数概念 4.2.缺省参数的分类 5.函数重载 5.1.函数重载概念 5.2.C支持函数…

深度学习-04-数值的微分

深度学习-04-数值的微分 本文是《深度学习入门2-自製框架》 的学习笔记&#xff0c;记录自己学习心得&#xff0c;以及对重点知识的理解。如果内容对你有帮助&#xff0c;请支持正版&#xff0c;去购买正版书籍&#xff0c;支持正版书籍不仅是尊重作者的辛勤劳动&#xff0c;也…

SHA256计算原理

标签: SHA256计算原理;SHA256;SHA-2; SHA-256计算原理 SHA-256(Secure Hash Algorithm 256-bit)是SHA-2系列中的一种哈希算法,它由美国国家安全局(NSA)设计,并由美国国家标准与技术研究院(NIST)发布。SHA-256主要用于数据完整性验证和数字签名等领域。以下是SHA-…

所有人都可以做的副业兼职,短剧推广,1天挣几百,附详细方法!

自从上次向大家介绍了短剧掘金项目以来&#xff0c;便陆续收到了众多朋友的询问&#xff1a;现在是否还能加入短剧掘金的大军&#xff1f;答案是肯定的。目前&#xff0c;无论是各大视频平台还是其他渠道&#xff0c;短剧掘金项目都呈现出蓬勃发展的态势。而且&#xff0c;相关…

SSM高校社团管理系统-计算机毕业设计源码86128

目 录 摘要 1 绪论 1.1研究背景与意义 1.2开发现状 1.3研究方法 1.4 ssm框架介绍 1.5论文结构与章节安排 2 高校社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1 功能性分…

QT实现动态翻译切换

1、实现QT动态中英文切换效果 效果如下: 2、原理 因为软件本身就是中文版,所以只需准备一个英文版的翻译即可,,那就是将所有需要翻译的地方用tr包裹,然后首先执行lupdate更新一下,接着用qt的翻译软件 Qt Linguist打开ts文件进行翻译,然后保存,最后使用 lrelease发布一…

C++类和对象中的构造函数和析构函数

C类和对象构造函数和析构函数 文章目录 C类和对象构造函数和析构函数1.构造函数&#xff08;Constructor&#xff09;1.示例2.特点 2.析构函数&#xff08;Destructor&#xff09;1.示例2.特点 3.构造函数的分类1.默认构造函数2.带参数的构造函数3.拷贝构造函数4.默认构造函数和…

位运算专题

常见位运算总结: 1. 基础位运算 << 左移 >> 右移 ~ 按位取反 & 按位与 口诀: 有0则0 | 按位或 口诀: 有1则1 ^ 异或 口诀:相同为0,相异为1 / 无进位相加 2. 位运算的优先级 做题时, 能加括号就加括号, 无需管优先级如何 3. 给一个二进制数n, 确定…

为什么总是卡在验证真人这里无法通过验证?

最近总是在浏览某些网站的时候卡在这个“确认你是真人”的验证页面&#xff0c;无法通过真人验证&#xff0c;这是怎么回事儿&#xff1f;如何解决呢&#xff1f; 首先&#xff0c;出现这个“确认您是真人”的验证一般都是这个网站使用了 CloudFlare 的安全防护 WAF 规则才会出…

Ray Tracing in one Weekend But on CUDA

Ray Tracing in one Weekend But on CUDA 环境说明项目代码项目内容思路实现方法效果 环境说明 代码运行在Visual Studio 2019环境&#xff0c;显卡为NVIDIA GeForce GTX 1650&#xff0c;CUDA版本为11.6&#xff0c;cuDNN版本为8.4.0。具体配置方式见CUDA C/C 从入门到入土 第…

洛谷P2370yyy2015c01 的 U 盘

传送门——P2370 yyy2015c01 的 U 盘 题解&#xff1a;题目意思很好理解&#xff0c;就是说&#xff0c;当能够达到预期的U盘的最小接口&#xff08;接口越大&#xff0c;能传递的文件越大&#xff09;&#xff0c;然后我们就需要先看题目了&#xff0c;有n个文件&#xff0c;每…