Skip to content
Snippets Groups Projects
Commit 1bb500d1 authored by Fabio Vandewaeter's avatar Fabio Vandewaeter
Browse files

TP2 exercice 2

parent 95a65edc
No related branches found
No related tags found
No related merge requests found
...@@ -279,11 +279,63 @@ fn main() { ...@@ -279,11 +279,63 @@ fn main() {
## 2.3. Lifetimes on types ## 2.3. Lifetimes on types
### 2.3.1. Types 1 ### 2.3.1. Types 1
On ajoute un lifetime au type `Message` pour son attribut `content` qui est une référence car le type `Message` a besoin que la référence de `content` soit valide encore valide pour être utilisé :
```rs ```rs
struct Message<'a> {
content: &'a str,
}
impl<'a> Message<'a> {
fn from(s: &str) -> Message {
Message {
content: s
}
}
}
fn main() {
let s = String::from("Hello");
let m = Message::from(&s);
println!("{}", m.content);
}
``` ```
### 2.3.2. Types 2 ### 2.3.2. Types 2
On ajoute le lifetime `'a` au type `Node` car il a une référence vers un autre `Node` :
```rs ```rs
struct Node<'a> {
value: i32,
next: Option<&'a Node<'a>>
}
impl<'a> Node<'a> {
fn new(value: i32) -> Node<'a> {
Node { value, next: None }
}
fn push(&mut self, node: &'a Node<'a>) {
self.next = Some(node);
}
fn print(&self) {
println!("{}", self.value);
if let Some(n) = self.next {
n.print()
}
}
}
fn main() {
let mut node1 = Node::new(1);
let mut node2 = Node::new(2);
let node3 = Node::new(3);
node2.push(&node3);
node1.push(&node2);
node1.print();
}
``` ```
# 3. Long exercise : a mini web server # 3. Long exercise : a mini web server
......
struct Message<'a> {
content: &'a str,
}
impl<'a> Message<'a> {
fn from(s: &str) -> Message {
Message {
content: s
}
}
}
fn main() {
let s = String::from("Hello");
let m = Message::from(&s);
println!("{}", m.content);
}
struct Node<'a> {
value: i32,
next: Option<&'a Node<'a>>
}
impl<'a> Node<'a> {
fn new(value: i32) -> Node<'a> {
Node { value, next: None }
}
fn push(&mut self, node: &'a Node<'a>) {
self.next = Some(node);
}
fn print(&self) {
println!("{}", self.value);
if let Some(n) = self.next {
n.print()
}
}
}
fn main() {
let mut node1 = Node::new(1);
let mut node2 = Node::new(2);
let node3 = Node::new(3);
node2.push(&node3);
node1.push(&node2);
node1.print();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment