当前位置:网站首页>Cells in rust share variable pointers
Cells in rust share variable pointers
2022-04-23 18:03:00 【Xu Yeping】
Rust Medium Cell Shared variable pointer
1 First time to know Cell
Cell and Box It's almost functional , But it allows multiple variables to share content , It is also allowed to modify the content when multiple variables are shared . Let's take an example :
use std::cell::Cell;
fn main() {
let x = Cell::new(123);
println!("{:?}", x);
}
------------------------------------------------------
>cargo run
Cell {
value: 123 }
2 Multiple references can be modified , Modify data in many ways
Be careful , Variable x Not added mut modification , The following code can also be modified . This explanation Cell The internal modification behavior of should adopt some kind of unsafe In the form of , Only from the surface form of the function call, we can't see the behavior of the variable to be modified . In this way, the check of the modification operation is transferred from the compile time to the run time of the , from Cell Your code determines whether there is a modification conflict .
use std::cell::Cell;
fn main() {
let x = Cell::new(123);
x.set(456);
println!("{:?}", x);
}
------------------------------------------------------
>cargo run
Cell {
value: 456 }
Because there is no right x use mut, Therefore, the compiler will think that it is aimed at x All operations are read-only , No errors will be reported during compilation for potential modification actions .
because rust Allow multiple read-only references , therefore ,Cell It's like secretly opening a back door , Allow multiple different references to modify the content of the same variable .
use std::cell::Cell;
fn main() {
let x = Cell::new(123);
let a = &x;
let b = &x;
a.set(456);
b.set(789);
println!("{:?}", x);
}
------------------------------------------------------
>cargo run
Cell {
value: 789 }
in fact , a and b Is directed x Variable references to , But from the surface grammar , It doesn't need to mut keyword , Therefore, you can bypass the syntax check of the compiler .
3 Read the content
If the content book can Copy Of , It can also be used. get Method to copy the contents to other variables .
use std::cell::Cell;
fn main() {
let x = Cell::new(123);
x.set(456);
let y = x.get();
println!("{:?}, {:?}", x, y);
}
------------------------------------------------------
>cargo run
Cell {
value: 456 }, 456
If the content is not implemented Copy characteristic , be get Method cannot be used .
use std::cell::Cell;
fn main() {
let x = Cell::new("hello".to_string());
x.set("nice".to_string());
let y = x.get();
println!("{:?}, {:?}", x, y);
}
------------------------------------------------------
>cargo run
--> src\main.rs:5:15
|
5 | let y = x.get();
| ^^^
|
::: C:\Users\xxxx\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib/rustlib/src/rust\library\alloc\src\string.rs:292:1
|
292 | pub struct String {
| ----------------- doesn't satisfy `String: Copy`
版权声明
本文为[Xu Yeping]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204230544498565.html
边栏推荐
- 2022 tea artist (primary) examination simulated 100 questions and simulated examination
- Crack sliding verification code
- k8s之实现redis一主多从动态扩缩容
- C [file operation] read TXT text by line
- Reptile efficiency improvement method
- Theory and practice of laser slam in dark blue College - Chapter 2 (odometer calibration)
- 20222 return to the workplace
- Nanotechnology + AI enabled proteomics | Luomi life technology completed nearly ten million US dollars of financing
- Solving the problem of displaying too many unique values in ArcGIS partition statistics failed
- Transfer learning of five categories of pictures based on VGg
猜你喜欢

Theory and practice of laser slam in dark blue College - Chapter 2 (odometer calibration)

2022江西储能技术展会,中国电池展,动力电池展,燃料电池展

Nat commun | current progress and open challenges of applied deep learning in Bioscience

mysql自动启动设置用Systemctl start mysqld启动
Logic regression principle and code implementation

Re expression régulière
![Yolov4 pruning [with code]](/img/09/ea4376d52edb7e419ace2cb1e0356b.gif)
Yolov4 pruning [with code]

JS get link? The following parameter name or value, according to the URL? Judge the parameters after

极致体验,揭晓抖音背后的音视频技术

Eigen learning summary
随机推荐
解决允许在postman中写入注释请求接口方法
Classification of cifar100 data set based on convolutional neural network
Pyppeter crawler
Re expression régulière
Qt读写XML文件(含源码+注释)
ArcGIS license error -15 solution
Installation du docker redis
[UDS unified diagnostic service] v. diagnostic application example: Flash bootloader
QTableWidget使用讲解
Go's gin framework learning
Remember using Ali Font Icon Library for the first time
Auto. JS custom dialog box
Halo 开源项目学习(二):实体类与数据表
Solving the problem of displaying too many unique values in ArcGIS partition statistics failed
GDAL + ogr learning
Classes and objects
列錶的使用-增删改查
Install pyshp Library
[UDS unified diagnostic service] (Supplement) v. detailed explanation of ECU bootloader development points (1)
2022 Jiangxi energy storage technology exhibition, China Battery exhibition, power battery exhibition and fuel cell Exhibition