【发布时间】:2015-06-22 16:20:56
【问题描述】:
我有一个关于 Rust(1.0 版)中泛型的新手问题。
假设我编写了一个通用函数来进行除法。别介意这种功能的用处;这是一个让这个问题保持简单的简单功能。
fn divide<T: std::ops::Div>(a: T, b: T) -> T {
a / b
}
fn main() {
println!("{}", divide(42, 18))
}
这个程序编译失败。
src/main.rs:2:5: 2:10 error: mismatched types:
expected `T`,
found `<T as core::ops::Div>::Output`
(expected type parameter,
found associated type) [E0308]
src/main.rs:2 a / b
^~~~~
我了解编译器错误告诉我除法运算的结果是类型Output,而不是T,我在standard library documentation 中看到Output 类型。
如何从Output 转换为T?我尝试使用as 进行投射。
fn divide<T: std::ops::Div>(a: T, b: T) -> T {
(a / b) as T
}
fn main() {
println!("{}", divide(42, 18))
}
这会导致不同的编译器错误。
src/main.rs:2:5: 2:17 error: non-scalar cast: `<T as core::ops::Div>::Output` as `T`
src/main.rs:2 (a / b) as T
^~~~~~~~~~~~
我没有使这项工作发挥作用的想法,并且我意识到我对这里的语言的基本知识缺乏了解,但我什至不知道要寻找什么来使这项工作发挥作用。帮忙?
【问题讨论】:
标签: rust