rust - "two periods"运算符在方括号内的下标上下文中是什么意思?

标签 rust syntax

我正在查看 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 书。有六种口味:

  1. Range : 1..10
  2. RangeFrom : 1..
  3. RangeTo : ..10
  4. RangeFull : ..
  5. RangeInclusive : 1..=10
  6. RangeToInclusive : ..=10

当没有项目占据结束位置时,范围将“永远”朝该方向延伸。

这结合了 Index特征(或 IndexMut ,如果需要突变)。在您的示例中,您有一个要对其应用索引的字符串切片(某种程度上,请参见下一点):"foo"[2..]

具体来说,&strIndex 实现为

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/

相关文章:

rust - 当Foobar具有正好一个字段时,直接将Vec <Foobar <T >>反序列化为Vec <T>

rust - 如何在 Rust 中以编程方式读取属性

rust - headless SDL 事件处理

generics - 如何表示返回的关联类型实现了特征?

memory-management - 存储 Vec 和 Slice 有什么区别?

powershell - imagemagick 中 STDIN/STDOUT 的正确语法

ruby - 有人可以解释这个 ruby 代码吗?

python - 字符串格式化命名参数?

java - Java Thread trail 中 "new"周围的括号?

jquery - 这个语法有什么问题?