如何将具有“读取”特征的类似字符串的内容传递给“发件人”的实现?

凯尔

我正在写一个分词器,为了方便起见,我写了一个Reader对象,一次返回一个单词。words耗尽时,它从读BufReader来填充words因此,我认为file并且words应该都存在于该结构中。

我遇到的问题是我想通过传递要标记化的字符串来测试它,而不必依赖文件。这就是为什么我尝试From同时在aFile和then&str实现的原因String后两个不起作用(如下所示)。

我尝试Reader使用生命周期进行注释,然后将其用于的实现From<&'a str>,但这没有用。我最后得到了一个Reader<'a, T: Read>,但是编译器抱怨没有任何使用过lifetime参数的东西。

另一种可行的实现方式From<&'static str>可以正常工作,但这意味着传入的任何字符串都必须在静态生存期内存在。

我也看到了这个问题/答案,但是似乎有所不同,因为它们Enum具有生命周期参数。

标题中有两个补充问题以及整体问题:

  1. 我也看到了FromStr,但是还没有尝试使用它-是否合适?
  2. 我的代码注释是否对下面的可变所有权/生存期正确?

我的最小示例在这里(省略了导入):

#[derive(Debug)]
struct Reader<T: Read> {
    file: BufReader<T>,
    words: Vec<String>,
}

impl From<File> for Reader<File> {
    fn from(value: File) -> Self {                     // value moves into from
        Reader::new(BufReader::new(value))             // value moves into BufReader(?)
    }
}

// THE NEXT TWO DON'T WORK
impl From<&str> for Reader<&[u8]> {
    fn from(value: &str) -> Self {                     // Compiler can't know how long the underlying data lives
        Reader::new(BufReader::new(value.as_bytes()))  // The data may not live as long as BufReader
    }
}

impl From<String> for Reader<&[u8]> {
    fn from(value: String) -> Self {                   // value moves into from
        Reader::new(BufReader::new(value.as_bytes()))  // value doesn't move into BufReader or Reader
    }                                                  // value gets dropped
}


impl<T: Read> Reader<T> {
    fn new(input: BufReader<T>) -> Self {
        Self {
            file: input,
            words: vec![],
        }
    }
}
用户名

其中&str一个使用生命周期注释进行编译(操场):

impl<'a> From<&'a str> for Reader<&'a [u8]> {
    fn from(value: &'a str) -> Self {
        Reader::new(BufReader::new(value.as_bytes()))
    }
}

正如评论中所讨论的,您只需要注释引用,而不必尝试将生存期注释合并到Reader自身中。

请注意,相同的方法行不通,String因为将其签名from移入函数,并且函数无法返回属于局部变量的字节。您可以为其实现&String,但也可以使用&str

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

error_log将参数传递给发件人

来自分类Dev

error_log将参数传递给发件人

来自分类Dev

如何将字符数组传递给字符串

来自分类Dev

如何将字符串传递给HashSet包含?

来自分类Dev

如何将字符串传递给宏函数

来自分类Dev

如何将字符串传递给工厂

来自分类Dev

如何将字符串参数传递给jQuery

来自分类Dev

如何将字符串从doInBackground传递给onPostExecute

来自分类Dev

如何将字符串数组传递给函数?

来自分类Dev

如何将生成的字符串传递给 EditText?

来自分类Dev

如何将字符串传递给 glutCreateWindow() 函数?

来自分类Dev

Bleno:如何将消息发送回发件人?

来自分类Dev

如何将特定按钮识别为发件人

来自分类Dev

如何将Swift字符串数组传递给带有char **参数的C函数

来自分类Dev

如何将字符串值传递给我应用中的所有ViewController

来自分类Dev

如何将变量传递给带有嵌套引号的字符串-Ruby

来自分类Dev

如何读取短信发件人的名字?

来自分类Dev

如何将字符串数组(具有xml内容)转换为XML文件?

来自分类Dev

如何将字符串值传递给Webview,例如:传递给youtube”

来自分类Dev

如何将具有字符串数据成员的类的对象传递给C ++中的另一个类

来自分类Dev

为了实现ToSocketAddrs特征,如何将字符串强制转换为&str?

来自分类Dev

如何将从键盘读取的字符串传递给isdecimal等函数?

来自分类Dev

GNU Parallel 用法 - 如何将当前传递的字符串传递给并行?

来自分类Dev

将具有特殊字符的动态字符串变量传递给JQuery Function

来自分类Dev

如何将特征对象传递给向量,该向量在向量的向量中也将具有统一的类型?

来自分类Dev

如何将字符串数组指针传递给新的字符数组?在 C

来自分类Dev

SmsRetrieverClient.startSmsUserConsent()如何将不同的发件人编号作为参数传递?

来自分类Dev

将具有动态数据的json字符串传递给primeNG数据表

来自分类Dev

将字符串传递给具有布尔类型的输入不会产生错误

Related 相关文章

  1. 1

    error_log将参数传递给发件人

  2. 2

    error_log将参数传递给发件人

  3. 3

    如何将字符数组传递给字符串

  4. 4

    如何将字符串传递给HashSet包含?

  5. 5

    如何将字符串传递给宏函数

  6. 6

    如何将字符串传递给工厂

  7. 7

    如何将字符串参数传递给jQuery

  8. 8

    如何将字符串从doInBackground传递给onPostExecute

  9. 9

    如何将字符串数组传递给函数?

  10. 10

    如何将生成的字符串传递给 EditText?

  11. 11

    如何将字符串传递给 glutCreateWindow() 函数?

  12. 12

    Bleno:如何将消息发送回发件人?

  13. 13

    如何将特定按钮识别为发件人

  14. 14

    如何将Swift字符串数组传递给带有char **参数的C函数

  15. 15

    如何将字符串值传递给我应用中的所有ViewController

  16. 16

    如何将变量传递给带有嵌套引号的字符串-Ruby

  17. 17

    如何读取短信发件人的名字?

  18. 18

    如何将字符串数组(具有xml内容)转换为XML文件?

  19. 19

    如何将字符串值传递给Webview,例如:传递给youtube”

  20. 20

    如何将具有字符串数据成员的类的对象传递给C ++中的另一个类

  21. 21

    为了实现ToSocketAddrs特征,如何将字符串强制转换为&str?

  22. 22

    如何将从键盘读取的字符串传递给isdecimal等函数?

  23. 23

    GNU Parallel 用法 - 如何将当前传递的字符串传递给并行?

  24. 24

    将具有特殊字符的动态字符串变量传递给JQuery Function

  25. 25

    如何将特征对象传递给向量,该向量在向量的向量中也将具有统一的类型?

  26. 26

    如何将字符串数组指针传递给新的字符数组?在 C

  27. 27

    SmsRetrieverClient.startSmsUserConsent()如何将不同的发件人编号作为参数传递?

  28. 28

    将具有动态数据的json字符串传递给primeNG数据表

  29. 29

    将字符串传递给具有布尔类型的输入不会产生错误

热门标签

归档