我正在查看 Rust 的源代码,以便更好地熟悉这门语言。我看到了这段代码。
// Collect program arguments as a Vec<String>.
let cmd: Vec<_> = env::args().collect();
// Some unrelated code omitted here.
match subcommand::parse_name(&cmd[1][..]) {
// It did some stuff here.
}
我没看懂 [..]
。所以,我去检查了 parse_name
的声明:
pub fn parse_name(name: &str) -> Option<Box<Subcommand>>
这是我所期望的,但我仍然没有得到 [..]
。在这种情况下是什么意思?不就是把cmd
中的第一个String
当做&str
传递吗?如果是这样,这是否等同于只编写 cmd[1]
?他们为什么要这样做?
最佳答案
两个句点 (..
) 是范围运算符。您可以在 Operators and Symbols Appendix 中找到它的 rust 书。有六种口味:
-
Range
:1..10
-
RangeFrom
:1..
-
RangeTo
:..10
-
RangeFull
:..
-
RangeInclusive
:1..=10
-
RangeToInclusive
:..=10
当没有项目占据结束位置时,范围将“永远”朝该方向延伸。
这结合了 Index
特征(或 IndexMut
,如果需要突变)。在您的示例中,您有一个要对其应用索引的字符串切片(某种程度上,请参见下一点):"foo"[2..]
。
具体来说,&str
将Index
实现为
Returns a slice of the given string from the byte range
然后是第三人体工学方面的事:Deref
(或类似情况下的 DerefMut
)。 String
通过返回 &str
实现 Deref
,因此 &str
可用的任何方法都可用于 String
。
关于rust - "two periods"运算符在方括号内的下标上下文中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797599/