struct Cache<T> {
key: String,
val: T
}
impl<T> Cache<T> {
fn new(k: String, v: T) -> Cache<T> {
Cache { key: k, val: v }
}
fn update(&mut self, v: T) {
self.val = v;
}
}
fn increment<T>(cache: &mut Cache<T>, v: T) {
cache.update(v);
}
fn main() {
let mut c = Cache::new("akshay".to_string(), 21);
c.update(25);
println!("c = {}", c.val);
increment(&mut c, 30);
println!("c = {}", c.val);
}
Этот пример отлично работает. Но если я изменяю cache.update(v);
на cache.update(25);
в функции increment
, я получаю следующую ошибку:
cache.update(25);
| ^^ expected type parameter, found integer
|
= note: expected type `T`
found type `{integer}`
= help: type parameters must be constrained to match other types
Итак, мой вопрос, почему метод cache.update(25)
работает из main
функция, но не из increment
функция?