当前位置:网站首页>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
边栏推荐
- Implementation of object detection case based on SSD
- Gaode map search, drag and drop query address
- Read excel, int digital time to time
- Docker installation MySQL
- Realsense selection comparison d455 d435i d415 t265 3D hardware comparison
- Install pyshp Library
- Re expression régulière
- Laser slam theory and practice of dark blue College Chapter 3 laser radar distortion removal exercise
- Examination question bank and online simulation examination of the third batch (main person in charge) of special operation certificate of safety officer a certificate in Guangdong Province in 2022
- Amount input box, used for recharge and withdrawal
猜你喜欢
Qtablewidget usage explanation
C1小笔记【任务训练篇一】
Go语言JSON包使用
Solving the problem of displaying too many unique values in ArcGIS partition statistics failed
Transfer learning of five categories of pictures based on VGg
Visualization of residential house prices
Dock installation redis
Nat Commun|在生物科学领域应用深度学习的当前进展和开放挑战
Yolov4 pruning [with code]
C1小笔记【任务训练篇二】
随机推荐
Remember using Ali Font Icon Library for the first time
Nanotechnology + AI enabled proteomics | Luomi life technology completed nearly ten million US dollars of financing
C language loop structure program
ES6
mysql自动启动设置用Systemctl start mysqld启动
Go language JSON package usage
Halo 开源项目学习(二):实体类与数据表
Clion installation tutorial
Docker 安装 Redis
MySQL_01_简单数据检索
journal
Process management command
Operators in C language
How to install jsonpath package
Docker 安装 MySQL
C1小笔记【任务训练篇二】
解决报错max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
Gaode map search, drag and drop query address
Laser slam theory and practice of dark blue College Chapter 3 laser radar distortion removal exercise
Go语言JSON包使用