我正在判断一个箱子hifijson来解析JSON源代码,我偶然发现了以下内容:

fn skip_until(&mut self, stop: impl FnMut(u8) -> bool) {
    use crate::Write;
    self.write_until(&mut &[][..], stop) // <-
}

您可以查看完整的实现here.

我对上面用注释<-标记的在线语法&[][..]有点不确定.虽然我认为它在这里将bytes字段作为struct SliceLexer的可变片段传递,但我以前从未在RUST文档或其他地方看到过这种语法.

有人可以解释一下它是如何工作的,并确认它是否只适用于这里,因为struct只有一个字段,那就是borrow 的片,并且这个语法是否在某个地方有文档记录?

推荐答案

[]是由0个元素组成的数组文字,[..]使用范围进行索引,&接受引用,因此&[][..]创建了一个空片引用,通常称为片.

它不会以任何方式连接到self,除非您将其传递给self的方法.

Rust相关问答推荐

捕获Rust因C++异常而产生panic

如何使用字符串迭代器执行查找?

异步FN中的 rust 递归

在Rust中有没有办法在没有UB的情况下在指针和U64之间进行转换?

使用铁 rust S还原对多个数组执行顺序kronecker积

使用Py03从Rust调用Python函数时的最佳返回类型

如何将映射反序列化为具有与键匹配的字段的定制 struct 的向量?

使用Rust WASM读取文件

对于rustc编译的RISC-V32IM二进制文件,llvm objdump没有输出

为什么不';t(&;mut-iter).take(n)取得iter的所有权?

结果流到 Vec 的结果:如何避免多个into_iter和collect?

`UnsafeCell` 在没有锁定的情况下跨线程共享 - 这可能会导致 UB,对吗?

(let b = MyBox(5 as *const u8); &b; ) 和 (let b = &MyBox(5 as *const u8); ) 之间有什么区别

为什么不可变特征的实现可以是可变的?

哪些特征通过 `Deref` 而哪些不通过?

&str 的编译时拆分是否可能?

`use std::error::Error` 声明中断编译

Abortable:悬而未决的期货?

你能用 Rust 和 winapi 制作 Windows 桌面应用程序吗?

有什么办法可以用 Rust 访问 Windows 最近的文件夹吗?