Я пытаюсь реализовать функцию с необязательной ссылкой. Я хотел бы иметь возможность использовать его так:
fn main() {
let x = 557483943;
test_function(x, None);
let params = parameters(x);
test_function(x, Some(¶ms));
}
, где parameters(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: {:?}", ¶ms);
}
, который работает, но я не уверен, что это идиоматизм c способ сделать это в ржавчине.
Есть ли способ избежать tmp_params
и создать Parameters
, созданный в операторе match
, изживший сам оператор match
?
Есть ли лучший / более идиоматический c способ сделать это?