是否可以使用指定的关联类型创建特征别名?我正在使用类似问题Type alias for multiple traits
的方法trait Trait {
type Item;
}
fn print<T>(value: T) where T: Trait<Item=char> {
}
trait Alias: Trait {}
impl<T: Trait<Item=char>> Alias for T {}
fn print_alias<T: Alias>(value: T) {
print(value)
}
fn main() {
}
但是无法编译并出现以下错误:
<anon>:12:5: 12:10 error: type mismatch resolving `<T as Trait>::Item == char`:
expected associated type,
found char [E0271]
<anon>:12 print(value)
^~~~~
<anon>:12:5: 12:10 note: required by `print`
<anon>:12 print(value)
^~~~~
error: aborting due to previous error
游戏围栏链接:http://is.gd/LE4h6a
答案 0 :(得分:6)
@ Shepmaster的解决方案可以在本地解决问题;但你必须每次都指定sContent = Regex.Replace(sContent, @"\", "");
。或者,您可以通过要求所有where T: Alias<Item=char>
实现Alias
:
Trait<Item=char>
首选哪种全球或本地解决方案完全取决于您。
答案 1 :(得分:3)
您目前只要求Alias
的所有值都必须实现Trait
,但不要求Item
的类型必须为char
。要做到这一点,你必须使用以下内容:
trait Alias: Trait<Item=char> {}
答案 2 :(得分:2)
您仍需要在print_alias
方法中指定相关类型:
fn print_alias<T>(value: T)
where T: Alias<Item=char>
{
print(value)
}
问题在于您已指定每个Trait<Item=char>
也实现Alias
(因此Alias<Item=char>
),但这并不意味着每个Alias
实现{ {1}}!