代码之家  ›  专栏  ›  技术社区  ›  user366312

如何在Rust中对Match<á,P>进行显式解密?

  •  0
  • user366312  · 技术社区  · 1 年前

    假设,我想对 Matches<'a, P> 类型

    我可以传递哪些实际类型 'a 而不是使用 _ ?

     use std::str::Matches;
    
    fn main() {
        let my_string = "Hello. I have a string and a substring.";
        let pat = "ing";
    
        let matches: Matches<'_, &'static str> = my_string.matches(pat);
    
        println!("{}", matches.count());
    }
    
    0 回复  |  直到 1 年前
        1
  •  1
  •   Ömer Erden Eugen Dück    1 年前

    这取决于您如何创建对象。对于您正在使用的案例 matches 要创建的函数 Matches 。 让我们检查一下的定义 matches :

    pub fn matches<'a, P>(&'a self, pat: P) -> Matches<'a, P>
    where
        P: Pattern<'a>,
    

    当你打电话 my_string.matches(pat); 然后 'a 成为 my_string ( my_string &'static str 然后 ’a 'static )

    会的 任意寿命 什么时候 my_string 键入为 String

    在您无法显式声明lifetime的情况下,它将从my_string中获取, 但是考虑这样的函数:

    use std::str::Matches;
    
    fn count_ings<'a>(source: &'a str) -> usize {
        let matches: Matches<&'a str> = source.matches("ing"); //explicitly declared
    
        matches.count()
    }
    
    fn main() {
        let my_string = "Hello. I have a string and a substring.".to_string();
    
        println!("'ing' count: {}", count_ings(&my_string));
    }
    

    IMHO这为 匹配 var,但如果你想使用它,就使用它。此外,你甚至可以选择退出终身声明,由于终身省略,不需要添加通配符。

    let matches: Matches<_> = source.matches("ing"); //replace with the line above.
    
        2
  •  1
  •   yolenoyer    1 年前

    对于 Matches<'a, P> ,你有 where P: Pattern<'a> 。所以在你的情况下 'static :

    let matches: Matches<'static, &'static str> = my_string.matches(pat);