我想在Rust中创建一个子字符串.它以字符串的出现开始,以字符串末尾减去四个字符或某个字符结束.
我的第一个方法是
string[string.find("pattern").unwrap()..string.len()-5]
Run Code Online (Sandbox Code Playgroud)
这是错误的,因为Rust的字符串是有效的UTF-8,因此是字节而不是基于字符的.
我的第二种方法是正确的但是过于冗长:
let start_bytes = string.find("pattern").unwrap();
let mut char_byte_counter = 0;
let result = line.chars()
.skip_while(|c| {
char_byte_counter += c.len_utf8();
return start_bytes > char_byte_counter;
})
.take_while(|c| *c != '<')
.collect::<String>();
Run Code Online (Sandbox Code Playgroud)
是否有更简单的方法来创建子串?我找不到标准库的任何部分吗?
我有收集转储到磁盘上.在请求时,应该检索这些集合(没问题),并且iterator应该为它构建一个返回对检索到的值的引用的集合.
在之后iterator被丢弃,我不需要收集了.我也希望它被删除.
到目前为止我尝试了什么:
在Iterator拥有集合.这对我来说最有意义,但这是不可能的; 我不太清楚为什么.有人说Iterator特征的方法签名next是问题所在.(例子)
引用计数:Retriever返回a Rc<Vec<usize>>.我遇到了与拥有迭代器相同的问题.(例子)
让猎人拥有该集合并分发对它的引用.我尝试使用内部mutability(RefCell<HashMap>)实现检索器,但是我无法将引用返回到HashMap具有足够长的生命周期.
我看到了两个基本的可能性.
检索器转移所有权.然后Iterator需要拥有数据.有些东西:
use std::slice::Iter;
fn retrieve(id: usize) -> Vec<usize> {
//Create Data out of the blue (or disk, or memory, or network. I dont care)
//Move the data out. Transfer ownership
let data = vec![0, 1, 2, 3];
data
}
fn consume_iterator<'a, TIterator: Iterator<Item=&'a usize>>(iterator: TIterator) {
for i …Run Code Online (Sandbox Code Playgroud)我正在为wordpress编写一个插件,需要为用户发出的每个请求调用API.
这些API调用使用HTTPS协议完成.目前,对于每个新用户请求,我需要重新打开HTTPS连接.
是的,curl允许持久连接(重用句柄或使用多句柄),但我想在多个用户请求中保持连接.
那么:是否可以通过多个PHP进程保持HTTPS连接打开并重用它?另一种方法是让用户的浏览器进行API谈话.但如果有可能我想避免这种情况.
考虑这两个特征:
trait Iterator {
type Item;
fn next(&mut self) -> Option<Self::Item>;
}
Run Code Online (Sandbox Code Playgroud)
和
trait SeeekingIterator {
type Item;
fn next(&mut self, other: &Self::Item) -> Option<Self::Item>;
}
Run Code Online (Sandbox Code Playgroud)
现在假设,我想实现像std::iter::Peekable为实现这两个结构Iterator和SeekingIterator。
这看起来有点像:
struct PeekableSeekable<I> where
I: Iterator + SeekingIterator
{
iter: I,
peeked: Option<<I as Iterator>::Item>
}
Run Code Online (Sandbox Code Playgroud)
它将实施
fn peek(&mut self) -> Option<&<I as Iterator>::Item>;
Run Code Online (Sandbox Code Playgroud)
和
fn peek_seek(&mut self, other: &<I as SeekingIterator>::Item) -> Option<&<I as SeekingIterator>::Item>
Run Code Online (Sandbox Code Playgroud)
现在的问题是,这只有在<I as Iterator>::Item == <I as SeekingIterator>::Item.
我不知道有什么方法可以在where …