相关疑难解决方法(0)

将本地String作为切片返回(&str)

有几个问题似乎与我遇到的问题有关.例如,请看这里这里.基本上我正在尝试String在本地函数中构建一个函数,但是然后将其作为一个函数返回&str.切片不起作用,因为寿命太短.我无法str直接在函数中使用,因为我需要动态构建它.但是,我也不想返回a,String因为一旦它构建完成,它进入的对象的性质就是静态的.有没有办法让我的蛋糕也吃?

这是一个最小的非编译复制:

fn return_str<'a>() -> &'a str {
    let mut string = "".to_string();

    for i in 0..10 {
        string.push_str("ACTG");
    }

    &string[..]
}
Run Code Online (Sandbox Code Playgroud)

rust

37
推荐指数
3
解决办法
8961
查看次数

有没有办法返回对函数中创建的变量的引用?

我想编写一个程序,分两步编写一个文件.在程序运行之前,该文件可能不存在.文件名是固定的.

问题是OpenOptions.new().write()可能会失败.在这种情况下,我想调用自定义函数trycreate().我们的想法是创建文件而不是打开它并返回一个句柄.由于文件名是固定的,trycreate()没有参数,我不能设置返回值的生命周期.

我该如何解决这个问题?

use std::io::Write;
use std::fs::OpenOptions;
use std::path::Path;

fn trycreate() -> &OpenOptions {
    let f = OpenOptions::new().write(true).open("foo.txt");
    let mut f = match f {
        Ok(file)  => file,
        Err(_)  => panic!("ERR"),
    };
    f
}

fn main() {
    {
        let f = OpenOptions::new().write(true).open(b"foo.txt");
        let mut f = match f {
            Ok(file)  => file,
            Err(_)  => trycreate("foo.txt"),
        };
        let buf = b"test1\n";
        let _ret = f.write(buf).unwrap();
    }
    println!("50%");
    {
        let f = OpenOptions::new().append(true).open("foo.txt");
        let mut f …
Run Code Online (Sandbox Code Playgroud)

reference lifetime rust

31
推荐指数
4
解决办法
1万
查看次数

为什么我不能返回从String生成的&str值?

我在试图理解为什么我不能返回一个&strString(良好,什么时候as_str准备好?)而产生的价值时遇到了一些麻烦?我做错了什么.我得到了这个想法,因为我所做的一切都没有让这个价值足够长久使用.

我正在尝试实现error::Error自定义结构:

impl error::Error for LexicalError {
    fn description(&self) -> &str {
        let s = format!("{}", self);

        // s doesn't live long enough to do this, I've tried 
        // cloning s and using that, but still the clone doesn't
        // live long enough.
        s.trim()
    }

    fn cause(&self) -> Option<&error::Error> {
        None
    }
}
Run Code Online (Sandbox Code Playgroud)

(对于完整的片段,这里是围栏)

我无法弄清楚如何返回&str description,我想重用Display逻辑,除非我完全误解了description应该返回的内容(也许是对问题的简短描述).要么,我得到同样的问题,返回的format!(...)是一个变量,我似乎无法活得足够长,对我有用.

lifetime rust

11
推荐指数
1
解决办法
2310
查看次数

如何解决Rust中的“返回引用当前函数拥有的数据的值”错误?

我正在尝试对生成随机表达式的二叉树进行编码。我需要随机数和一组函数。我收到一个向量,其中包含树中表达式的功能和深度。在运算符向量中,我还包括一个“ ELEM”字符串,该字符串用于从向量中选择一个随机元素,然后将其更改为浮点型。

似乎我仍然不了解借用,移动和所有权的确切用途,因为它是递归函数,它显示错误,指出值已借用并且无法返回局部变量。

use rand::Rng;

struct Expression_Node<'a> {
    val: &'a str,
    left: Option<Box<Expression_Node<'a>>>,
    right: Option<Box<Expression_Node<'a>>>,
}

fn Create_Expression(
    operators: Vec<&str>,
    p: i32,
) -> std::option::Option<std::boxed::Box<Expression_Node<'_>>> {
    if p == 0 {
        let value = String::from(rand::thread_rng().gen::<f64>().to_string());
        let value2: &str = value.as_ref();
        //println!("{:?}", value);
        let new_node = Expression_Node {
            val: value2,
            left: None,
            right: None,
        };
        return Some(Box::new(new_node));
    }
    let value: &str = *rand::thread_rng().choose(&operators).unwrap();
    println!("VAL: {:?}", value);
    if value == "ELEM" {
        let value = rand::thread_rng().gen::<f64>().to_string();
    }

    let new_node = Expression_Node { …
Run Code Online (Sandbox Code Playgroud)

rust

6
推荐指数
1
解决办法
4025
查看次数

标签 统计

rust ×4

lifetime ×2

reference ×1