Skip to content

Commit ec1e643

Browse files
authored
add text
1 parent e72eeea commit ec1e643

File tree

1 file changed

+72
-1
lines changed

1 file changed

+72
-1
lines changed

ch-10-function.md

+72-1
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,27 @@ fn main() {
137137
```
138138
[Rust Playground](https://play.rust-lang.org/?gist=14e1dd199800765a535a6839429b0883&version=stable&mode=debug&edition=2015)
139139

140+
```rust
141+
fn main() {
142+
{
143+
fn change_char(a: &mut char) {
144+
*a = 'b'
145+
}
146+
let mut char_value = 'a';
147+
change_char(&mut char_value);
148+
println!("{}", char_value);
149+
}
150+
{
151+
fn change_i8(a: &mut i8) {
152+
*a = 5;
153+
}
154+
let mut value_i8 = 8;
155+
change_i8(&mut value_i8);
156+
println!("{}", value_i8);
157+
}
158+
}
159+
```
160+
140161
### Возвращение значения функцией
141162
Кроме принятия входных данных функция может возвращать значения. Для описание выходного значения функции в Rust используется особый синтаксис.
142163
```rust
@@ -182,7 +203,7 @@ fn main() {
182203
```
183204
[Rust Playground](https://play.rust-lang.org/?gist=af44e20b33a2f72a3f0087dd294b437f&version=stable&mode=debug&edition=2015)
184205

185-
### Возвращение нескольких значений одновременно из функции
206+
### Возвращение нескольких значений из функции одновременно
186207

187208
Для целей возвращения нескольких значений разных типов из функции, весьма удобно использовать кортежи.
188209

@@ -247,3 +268,53 @@ fn main() {
247268
Изучите тему работу со ссылочными переменными в функция более подробно. Напишите свои примеры их использования.
248269
Найдите ограничения в вашей системе по использованию вложенных ссылок `&&`. Экспериментальным путём выясните предельно уровень
249270
их вложенности.
271+
272+
### Изменение ссылок на переменную
273+
В Rust очень важно как может изменяться переменная и кто может иметь ссылку на неё. Проблема ссылочной целостности - весьма важная и является источником явных и неявных проблемы. В Rust может быть так: или одна переменная изменяет другую и больше никакая переменная не может иметь доступ к ней, или есть множество переменных, которые могут читать значение этой переменной. Третьего не дано.
274+
275+
Приведём пример:
276+
```rust
277+
fn main() {
278+
let mut value1: char = 'a';
279+
let mut value2: char = '1';
280+
{
281+
let mut link: &mut char = &mut value1;
282+
println!("{} ", *link);
283+
*link = 'f';
284+
println!("{} ", *link);
285+
link = &mut value2;
286+
println!("{} ", *link);
287+
*link = '6';
288+
println!("{} ", *link);
289+
290+
// let mut link2: &mut char = &mut value1;
291+
// println!(" {} ", *link2);
292+
// *link2 = 'k';
293+
}
294+
295+
{
296+
let mut link: &mut char = &mut value1;
297+
println!(" {} ", *link);
298+
*link = 'k';
299+
println!(" {} ", *link);
300+
link = &mut value2;
301+
println!(" {} ", *link);
302+
*link = '5';
303+
println!(" {} ", *link);
304+
}
305+
{
306+
let link1: &char = &value1;
307+
let link2: &char = &value1;
308+
println!(" {} ", *link1);
309+
println!(" {} ", *link2);
310+
311+
// let mut link3: &mut char = &mut value1;
312+
// println!(" {} ", *link3);
313+
}
314+
}
315+
316+
```
317+
[Rust Playground]( https://play.rust-lang.org/?gist=6e77747bce219ecef2550fbade7e62bc&version=stable&mode=debug&edition=2015)
318+
319+
#### Домашнее задание
320+
Придумайте свои примеры с использованием изменений значений ссылочных переменных.

0 commit comments

Comments
 (0)