小编JDe*_*ler的帖子

如何在Rust中的两个模式之间获取子字符串?

我想在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)

是否有更简单的方法来创建子串?我找不到标准库的任何部分吗?

string rust

5
推荐指数
1
解决办法
1669
查看次数

迭代收集.Iterator丢弃后立即删除它

我有收集转储到磁盘上.在请求时,应该检索这些集合(没问题),并且iterator应该为它构建一个返回对检索到的值的引用的集合.

在之后iterator被丢弃,我不需要收集了.我也希望它被删除.

到目前为止我尝试了什么:

  1. Iterator拥有集合.这对我来说最有意义,但这是不可能的; 我不太清楚为什么.有人说Iterator特征的方法签名next是问题所在.(例子)

  2. 引用计数:Retriever返回a Rc<Vec<usize>>.我遇到了与拥有迭代器相同的问题.(例子)

  3. 让猎人拥有该集合并分发对它的引用.我尝试使用内部mutability(RefCell<HashMap>)实现检索器,但是我无法将引用返回到HashMap具有足够长的生命周期.

我看到了两个基本的可能性.

  1. 检索器转移所有权.然后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)

iterator ownership rust

5
推荐指数
1
解决办法
290
查看次数

PHP:在多个请求中保持API连接到API

我正在为wordpress编写一个插件,需要为用户发出的每个请求调用API.

这些API调用使用HTTPS协议完成.目前,对于每个新用户请求,我需要重新打开HTTPS连接.

是的,curl允许持久连接(重用句柄或使用多句柄),但我想在多个用户请求中保持连接.

那么:是否可以通过多个PHP进程保持HTTPS连接打开并重用它?另一种方法是让用户的浏览器进行API谈话.但如果有可能我想避免这种情况.

php wordpress https curl keep-alive

3
推荐指数
1
解决办法
804
查看次数

检查 where 子句中是否存在相同的关联类型

考虑这两个特征:

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为实现这两个结构IteratorSeekingIterator

这看起来有点像:

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 …

generics rust

2
推荐指数
1
解决办法
326
查看次数

标签 统计

rust ×3

curl ×1

generics ×1

https ×1

iterator ×1

keep-alive ×1

ownership ×1

php ×1

string ×1

wordpress ×1