gpt4 book ai didi

rust - 使用标准库实现 slice_shift_char

转载 作者:行者123 更新时间:2023-11-29 07:48:10 27 4
gpt4 key购买 nike

我想使用 &str 方法 slice_shift_char,但它在 documentation 中被标记为不稳定:

Unstable: awaiting conventions about shifting and slices and may not be warranted with the existence of the chars and/or char_indices iterators

用 Rust 当前的标准库实现这个方法的好方法是什么?到目前为止,我有:

fn slice_shift_char(s: &str) -> Option<(char, &str)> {
let mut ixs = s.char_indices();
let next = ixs.next();
match next {
Some((next_pos, ch)) => {
let rest = unsafe {
s.slice_unchecked(next_pos, s.len())
};
Some((ch, rest))
},
None => None
}
}

我想避免调用 slice_unchecked。我正在使用 Rust 1.1。

最佳答案

嗯,你可以看看源代码,你会得到https://github.com/rust-lang/rust/blob/master/src/libcollections/str.rs#L776-L778https://github.com/rust-lang/rust/blob/master/src/libcore/str/mod.rs#L1531-L1539 .第二个:

fn slice_shift_char(&self) -> Option<(char, &str)> {
if self.is_empty() {
None
} else {
let ch = self.char_at(0);
let next_s = unsafe { self.slice_unchecked(ch.len_utf8(), self.len()) };
Some((ch, next_s))
}
}

如果你不想不安全,你可以只使用一个普通的切片:

fn slice_shift_char(&self) -> Option<(char, &str)> {
if self.is_empty() {
None
} else {
let ch = self.char_at(0);
let len = self.len();
let next_s = &self[ch.len_utf8().. len];
Some((ch, next_s))
}
}

关于rust - 使用标准库实现 slice_shift_char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31279656/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com