Poniższe ilustracje pokazują, z jakiego źródła pochodzi. Ponieważ as_slice()
jest przestarzałe, sugeruje się zastąpienie as_ref()
.Jak zapewnić adnotację typu dla `AsRef`?
Jednak w przypadku korzystania z niego w tym kontekście wymagana jest adnotacja typu.
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");
Jak mogę podać taką adnotację typu?. Jedyną składnią, którą mogę znaleźć w pewnym sensie jest <MyType as AsRef>::as_ref()
, ale nie wiem jak to zrobić z instancją.
Używam rustc 1.0.0-nightly (be9bd7c93 2015-04-05) (built 2015-04-05)
.
Przy okazji: ten przykład jest oparty na starym teście, który został przeniesiony do najnowszego rustc. W dawnych czasach as_slice() było nadal potrzebne. W dzisiejszych czasach można polegać tylko na automatycznych konwersjach opisanych w różnych odpowiedziach. – Byron