Это потому, что вы пытаетесь запустить только это:
let dimensions = 2;
let mut kdtree = KdTree::new(dimensions); // kdtree type is KdTree<?, ?, ?>
вместо:
let a: ([f64; 2], usize) = ([0f64, 0f64], 0);
let b: ([f64; 2], usize) = ([1f64, 1f64], 1);
let c: ([f64; 2], usize) = ([2f64, 2f64], 2);
let d: ([f64; 2], usize) = ([3f64, 3f64], 3);
let dimensions = 2;
let mut kdtree = KdTree::new(dimensions); // kdTree type is KdTree<f64, usize, &[f64; 2]>
kdtree.add(&a.0, a.1).unwrap();
kdtree.add(&b.0, b.1).unwrap();
kdtree.add(&c.0, c.1).unwrap();
kdtree.add(&d.0, d.1).unwrap();
Вы можете изменить верхний код на:
let dimensions = 2;
// we provide the type ourselves
let mut kdtree: KdTree<f64, usize, &[f64; 2]> = KdTree::new(dimensions);
Теперь это происходит так, как Rust выводит переменные типа во время компиляции.
Компилятор обычно может определить, какой тип мы хотим использовать, основываясь на значении и способах его использования
Во втором фрагменте кода Rust смог выяснить тип, который мы хотим kdtree
иметь, взглянув на наш метод add
, но это не произошло в первом случае, потому что не было предоставлено никакой дополнительной информации.
Третий фрагмент кода работает, потому что мы явно набираем тип kdtree
.
Но я не знаю, какие данные должны быть
Здесь data : T
- generi c и может быть чем угодно.