On end la variable mutable et on utilise une référence comme pour le problem 1
On rend la variable mutable et on utilise une référence comme pour le problem 1 :
```rs
```rs
structFoo{
structFoo{
...
@@ -112,9 +112,9 @@ fn main() {
...
@@ -112,9 +112,9 @@ fn main() {
Problèmes réglés :
Problèmes réglés :
- rendre les variables mutable pour les modifier
- rendre les variables mutable pour les modifier
- donner la valuer `None`de base à`best` pour être sûr qu'elle soit initialisée
- donner la valeur `None`au départ à la variable`best` pour être sûr qu'elle soit initialisée
- utiliser le type `u64` pour socker les résultats des additions avec des `u32` car le résultat peut être plus grand que le maximum de `u32`
- utiliser le type `u64` pour socker les résultats des additions avec des `u32` car le résultat peut être plus grand que le maximum de `u32`
- utiliser des références pour éviter de donner le ownership
- utiliser des références pour éviter de transférer le ownership
```rs
```rs
/// Returns a Vec of random values
/// Returns a Vec of random values
...
@@ -153,6 +153,8 @@ fn main() {
...
@@ -153,6 +153,8 @@ fn main() {
## 2.1. Elided lifetimes
## 2.1. Elided lifetimes
### 2.1.1. Elided 1
### 2.1.1. Elided 1
On met deux lifetiemes différentes car le résultat ne dépend pas des lifetimes des entrées :
```rs
```rs
fntotal_len<'a,'b>(a:&'astr,b:&'bstr)->usize{
fntotal_len<'a,'b>(a:&'astr,b:&'bstr)->usize{
a.len()+b.len()
a.len()+b.len()
...
@@ -165,6 +167,8 @@ fn main() {
...
@@ -165,6 +167,8 @@ fn main() {
### 2.1.2. Elided 2
### 2.1.2. Elided 2
On utilise la lifetime de l'argument pour la valeur retournée car dans les deux cas on retourne quelque chose qui n'a de sens que si `input` est encore valide car ce sont des références :
```rs
```rs
fnhalf_end<'l>(input:&'lstr)->&'lstr{
fnhalf_end<'l>(input:&'lstr)->&'lstr{
ifinput.len()<2{
ifinput.len()<2{
...
@@ -181,7 +185,7 @@ fn main() {
...
@@ -181,7 +185,7 @@ fn main() {
### 2.1.3. Elided 3
### 2.1.3. Elided 3
On utilise `'a` car la valeur de retour dépend toujours de `self` :
On utilise `'a`pour le retour car la valeur de retour dépend toujours de `self` :
```rs
```rs
structFoo{
structFoo{
...
@@ -237,7 +241,7 @@ fn main() {
...
@@ -237,7 +241,7 @@ fn main() {
### 2.2.2. Explicit 2
### 2.2.2. Explicit 2
On utilise une lifetime commun aux deux arguments car le résultat peut dépendre des deux :
On utilise une lifetime commune aux deux arguments car le résultat peut dépendre de l'un ou de l'autre argument :
```rs
```rs
fnlonguest<'l>(a:&'lstr,b:&'lstr)->&'lstr{
fnlonguest<'l>(a:&'lstr,b:&'lstr)->&'lstr{
...
@@ -280,7 +284,7 @@ fn main() {
...
@@ -280,7 +284,7 @@ fn main() {
## 2.3. Lifetimes on types
## 2.3. Lifetimes on types
### 2.3.1. Types 1
### 2.3.1. Types 1
On ajoute une 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é :
On ajoute une 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 encore valide pour être utilisée :