Rust 作为可选函数参数的引用

Rust 作为可选函数参数的引用,rust,Rust,我试图实现一个带有可选引用的函数。我希望能够像这样使用它: fn main() { let x = 557483943; test_function(x, None); let params = parameters(x); test_function(x, Some(&params)); } 其中参数(x)可能需要一些时间才能执行。因此,我希望能够传递一个可选的函数引用。目前,我将其用作测试代码: #[derive(Debug)] pub stru

我试图实现一个带有可选引用的函数。我希望能够像这样使用它:

fn main() {
    let x = 557483943;

    test_function(x, None);

    let params = parameters(x);
    test_function(x, Some(&params));
}
其中
参数(x)
可能需要一些时间才能执行。因此,我希望能够传递一个可选的函数引用。目前,我将其用作测试代码:

#[derive(Debug)]
pub struct Parameters {
    a: u32,
    b: u32,
}

pub fn parameters(x: u32) -> Parameters {
    // would be a tedious calculation...
    let a = x / 6453;
    let b = x % 589703;
    Parameters { a, b }
}
我想到的是:

pub fn test_function(x: u32, params: Option<&Parameters>) {
    // tmp_params is needed as owner of the return value of 
    // parameters(x) that outlives the match statement
    let tmp_params: Parameters;

    let params = match params {
        Some(params) => params,
        None => {
            tmp_params = parameters(x);
            &tmp_params
        },
    };
    println!("params: {:?}", &params);
}
pub fn test_函数(x:u32,参数:Option){
//tmp_参数需要作为的返回值的所有者
//超出匹配语句的参数(x)
设tmp_参数:参数;
设params=匹配params{
一些(参数)=>参数,
无=>{
tmp_params=参数(x);
&tmp_参数
},
};
println!(“参数:{:?},¶ms);
}
这是可行的,但我不确定这是否是rust中的惯用方法

是否有办法避免
tmp_参数
,并使
match
语句中创建的
参数
match
语句本身更有效


是否有更好/更惯用的方法来实现这一点?

是否有理由希望使用
选项
,而不仅仅是
选项
。使用选项引用,如果使用
None
params
调用
test_函数
,则参数将在本地创建,并在调用结束时销毁。如果您可以包含关于您的用例的更多周围信息,那么可能有一种完全不同的方法来实现这一点。否则,根据上下文,您当前的方法似乎是合理的。@sshashank124我不想将
params
移动到
test\u函数中
params
需要在函数调用后可用(如我在
println!(
行中的示例)。我的问题是,您的代码很奇怪,目前代码中的代码更好。>更清楚地说,为什么
test_function
会创建一个“default”参数,然后将其删除?特别是如果需要时间来创建。另一方面,为什么不让用户来做呢?好吧,在这种情况下,使用hashmap,比如或者使用一个元函数来处理函数的缓存,或者在这种情况下,您所拥有的是非常好的。虽然我同意@Stargateur,但这是一组有点奇怪的要求。您希望使用
选项而不仅仅是
选项是有原因的。使用选项引用,如果使用
None
params
调用
test_函数
,则参数将在本地创建,并在调用结束时销毁。如果您可以包含关于您的用例的更多周围信息,那么可能有一种完全不同的方法来实现这一点。否则,根据上下文,您当前的方法似乎是合理的。@sshashank124我不想将
params
移动到
test\u函数中
params
需要在函数调用后可用(如我在
println!(
行中的示例)。我的问题是,您的代码很奇怪,目前代码中的代码更好。>更清楚地说,为什么
test_function
会创建一个“default”参数,然后将其删除?特别是如果需要时间来创建。另一方面,为什么不让用户来做呢?好吧,在这种情况下,使用hashmap,比如或者使用一个元函数来处理函数的缓存,或者在这种情况下,您所拥有的是非常好的。虽然我同意@Stargateur,但它的要求有点奇怪