Rust не предполагает, что умножение на значения типа T
всегда приводит к новому значению типа T
. Вместо этого черта Mul
имеет связанный тип Output
, который указывает тип возврата умножения. В сообщении об ошибке упоминается этот тип как «найден связанный тип <T as std::ops::Mul>::Output
». Таким образом, самое простое решение состоит в том, чтобы изменить тип возвращаемого значения вашей функции на связанный тип:
fn evaluate<T: std::ops::Mul>(portfolio: T, quote: T) -> <T as std::ops::Mul>::Output {
portfolio * quote
}
Распространенный пример, где Output
не соответствует типу ввода, умножает две ссылки - результат обычно будет принадлежащий тип, а не ссылка снова.