@@ -210,9 +210,9 @@ purposes of this section, assume that the `entry` API for maps does
210
210
not exist):
211
211
212
212
``` rust
213
- fn get_default <'r ,K ,V : Default >(map : & 'r mut HashMap <K ,V >,
214
- key : K )
215
- -> & 'r mut V {
213
+ fn get_default <'r ,K : Hash + Eq ,V : Default >(map : & 'r mut HashMap <K ,V >,
214
+ key : K )
215
+ -> & 'r mut V {
216
216
match map . get_mut (& key ) { // -------------+ 'r
217
217
Some (value ) => value , // |
218
218
None => { // |
@@ -258,9 +258,9 @@ If we attempt the same workaround for this case that we tried
258
258
in the previous example, we will find that it does not work:
259
259
260
260
``` rust
261
- fn get_default1 <'r ,K ,V : Default >(map : & 'r mut HashMap <K ,V >,
262
- key : K )
263
- -> & 'r mut V {
261
+ fn get_default1 <'r ,K : Hash + Eq ,V : Default >(map : & 'r mut HashMap <K ,V >,
262
+ key : K )
263
+ -> & 'r mut V {
264
264
match map . get_mut (& key ) { // -------------+ 'r
265
265
Some (value ) => return value , // |
266
266
None => { } // |
@@ -281,9 +281,9 @@ the fact that the borrow checker uses the precise control-flow of the
281
281
function to determine which borrows are in scope.
282
282
283
283
``` rust
284
- fn get_default2 <'r ,K ,V : Default >(map : & 'r mut HashMap <K ,V >,
285
- key : K )
286
- -> & 'r mut V {
284
+ fn get_default2 <'r ,K : Hash + Eq ,V : Default >(map : & 'r mut HashMap <K ,V >,
285
+ key : K )
286
+ -> & 'r mut V {
287
287
if map . contains (& key ) {
288
288
// ^~~~~~~~~~~~~~~~~~ 'n
289
289
return match map . get_mut (& key ) { // + 'r
@@ -318,9 +318,9 @@ both nicer to read and more efficient even than the original version,
318
318
since it avoids extra lookups on the "not present" path as well:
319
319
320
320
``` rust
321
- fn get_default3 <'r ,K ,V : Default >(map : & 'r mut HashMap <K ,V >,
322
- key : K )
323
- -> & 'r mut V {
321
+ fn get_default3 <'r ,K : Hash + Eq ,V : Default >(map : & 'r mut HashMap <K ,V >,
322
+ key : K )
323
+ -> & 'r mut V {
324
324
map . entry (key )
325
325
. or_insert_with (|| V :: default ())
326
326
}
@@ -352,7 +352,7 @@ fn to_refs<T>(mut list: &mut List<T>) -> Vec<&mut T> {
352
352
loop {
353
353
result . push (& mut list . value);
354
354
if let Some (n ) = list . next. as_mut () {
355
- list = & mut n ;
355
+ list = n ;
356
356
} else {
357
357
return result ;
358
358
}
@@ -400,7 +400,7 @@ fn to_refs<T>(mut list: &mut List<T>) -> Vec<&mut T> {
400
400
let list1 = list ;
401
401
result . push (& mut list1 . value);
402
402
if let Some (n ) = list1 . next. as_mut () {
403
- list = & mut n ;
403
+ list = n ;
404
404
} else {
405
405
return result ;
406
406
}
0 commit comments