如何从 as_slice() 更改为 [] 语法?

les*_*how 4 syntax slice rust

针对较新的 nightlys 重新编译一些较旧的代码,我收到有关使用as_slice()有利于var[]语法的语法的警告。

但是,当我按照RFC 中as_slice()所示替换为时,我收到编译器错误:[]

 expected `&str`,
    found `str`
(expected &-ptr,
    found str) [E0308]
src/main.rs:38         print_usage(program[], opts);
Run Code Online (Sandbox Code Playgroud)

与我原来的相比

print_usage(program.as_slice(), opts);
Run Code Online (Sandbox Code Playgroud)

语法是否as_slice()完全消失,或者只是将其写为更惯用vec[]?当我按照编译器要求我做的事情时遇到的错误是怎么回事?

swi*_*ard 5

你已经接近成功了:

print_usage(&program[], opts);
Run Code Online (Sandbox Code Playgroud)

所以是的,现在我们应该使用方括号语法作为&[start .. end]or来&mut [start .. end]代替as_slice// slice/ 。slice_fromslice_to

  • 我认为由于新的 deref 强制规则,即使只是 `&program` (不带括号)就足够了(如果 `program` 是 `String` 或其他带有 `Deref<Target=str>` 的东西)。 (5认同)