gpt4 book ai didi

rust - 如何为 `AsRef` 提供类型注释?

转载 作者:行者123 更新时间:2023-11-29 07:45:58 24 4
gpt4 key购买 nike

以下代码显示了问题的来源。自 as_slice()已弃用,as_ref()建议作为替代品。

但是,在这种情况下使用它时,需要类型注释。

let s = "Hi";             // This is a string slice
// warning: use of deprecated item: use std::convert::AsRef<str> instead, #[warn(deprecated)] on by default
assert!(s.replace("Hi", "Ho").as_slice() == "Ho");
// tests/lang.rs:120:35: 120:43 error: type annotations required: cannot resolve `collections::string::String : core::convert::AsRef<_>` [E0283]
// assert!(s.replace("Hi", "Ho").as_ref() == "Ho");

我如何提供这样的类型注释?。我觉得有点适用的唯一语法是 <MyType as AsRef>::as_ref() ,但我不知道如何使用实例执行此操作。

我正在使用 rustc 1.0.0-nightly (be9bd7c93 2015-04-05) (built 2015-04-05) .

最佳答案

String&str 的精确情况下,最简单的是使用 Index语法:

let s: String = "foo".to_string();
let slice: &str = &s[..]; // full range index

在您的情况下,会给出:

let s = "Hi";
assert!(&s.replace("Hi", "Ho")[..] == "Ho");

但是,对于像 as_ref() 这样的 traits 方法,您也可以使用以下语法调用它们:

Trait::method(obj); // equivalent to obj.method();

它允许您像这样设置类型参数:

Trait::<T>::method(obj);

在您的情况下,替代语法将是:

let s = "Hi";
assert!(AsRef::<str>::as_ref(&s.replace("Hi", "Ho")) == "Ho");

关于rust - 如何为 `AsRef` 提供类型注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29643305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com