Метод из включенной реализации признака не найден в области видимости в Rust

#rust #compiler-errors

#Ржавчина #ошибки компилятора

Вопрос:

Я хочу использовать две внешние библиотеки (geo-types-0.6.0 и geo-offset-0.1.0) для выполнения геометрических алгоритмов.

Приведенный ниже пример кажется прекрасным: Line тип определен в библиотеке geo_types . Offset Признак, кроме того, записан в geo_offset . Включение этого признака должно привести к Line типу, реализующему метод offset . Однако я получаю следующую ошибку:

no method named `offset` found for struct `geo_types::line::Line<float>` in the current scope

В дополнение к этому, rust-analyzer в VS Code мне сообщается, что включенный признак Offset не используется. Почему это?

 use geo_types::{Coordinate, Line};
use geo_offset::Offset;

let line = Line::new(
    Coordinate { x: 0.0, y: 0.0 },
    Coordinate { x: 1.0, y: 8.0 },
);

let line_with_offset = line.offset(2.0)?;
  

Ответ №1:

geo-offset Ящик реализует Offset признак для geo::Line , а не geo_types::Line (src — поиск geo::Line ). Так что даже в этом случае geo::Line это просто реэкспорт geo_types::Line , компилятор rust не видит этого глубоко и знает только о Offset реализации для geo::Line .

Комментарии:

1. Может быть, потому, что пример в geo-offset неверен и показывает только то, что вы сделали? Возможно, стоит сообщить об ошибке с ними…

2. @Nevsden также обычно принимает ответ, если он устраняет проблему. Это сигнализирует о том, что «эта проблема решена».

3. Еще раз спасибо, просто отметил ваш ответ как решение. К вашему другому комментарию: Да, это, вероятно, так, я сообщу об этом.