如果函数在可选参数中返回值,我不想采取任何措施;如何仅测试regsvr32.exe /s your.dll
if %errorlevel% neq 0 regasm.exe your.dll
情况?该代码有效,但看起来很可怕。
None
在C语言中,我可以写:
let v = ffunc();
match v {
None => { callproc() },
Some(x) => { }
}
答案 0 :(得分:9)
要检查Option
是否为None
,可以使用Option::is_none
或使用if let
语法。
例如:
let x = ffunc();
if let None = x {
println!("x is None")
}
或使用Option::is_none
函数:
let x = ffunc();
if x.is_none() {
println!("x is None")
}
答案 1 :(得分:3)
如果选项为Some(x)
,请完成上述答案:
let v = ffunc()
if let Some(x) = v {
func_to_use_x(x);
} else {
callproc();
}
如果您不关心该选项中的值,则:
if v.is_none() {...}
或
if v.is_some() {...}
答案 2 :(得分:0)
如果您对该值不感兴趣,请使用
if !v.is_some() { ... }
答案 3 :(得分:0)
如果你想在Option
中插入一个值到如果它是None
,否则你可以使用get_or_insert
let mut x = None;
let y = x.get_or_insert(5);
assert_eq!(y, &5);
assert_eq!(x, Some(5));
或者 get_or_insert_with
用于惰性求值:
let mut x = None;
let y = x.get_or_insert_with(|| 5);
assert_eq!(y, &5);
assert_eq!(x, Some(5));
您也可以使用 or
和 or_else
返回一个新的 Option
,而不是改变原来的:
let x = None;
assert_eq!(x.or(Some(100)), Some(100));
let x = None;
assert_eq!(x.or_else(|| Some(100)), Some(100));
答案 4 :(得分:-2)
在 C 中,我们会返回一个指针(指向某物),可能是 NULL
。在 Rust 中,它会返回 sometype
,而不是返回 Option<sometype>
的函数或变量。这是一个枚举,但可以是 None
或 Some(sometype)
。如果是前者,就好像它是“空的”一样 - 采取行动。如果是后者,您将需要调用 unwrap
来获取实际值(sometype
类型)。
示例:
fn main() {
let maybe = maybe_get_string();
// maybe isn't a String, but actually an Option<String>
if maybe == None {
println!("String is NULL");
} else {
let mystring = maybe.unwrap();
println!("This is a test {}", mystring);
}
}
为了完整起见,这里有一个可以有效返回字符串或“null”的函数。实际上,它返回一个 None
或一个 Some(String)
可以解包到一个字符串:
fn maybe_get_string() -> Option<String> {
let n1 = 0;
// Returns an option - either some string, or none:
if (n1 % 2) == 0 {
return Some(String::from("Teststring"));
} else {
return None;
}
}