我有一些伪代码来判断变量是否为null:

Test test;

if (test == null) {
    test = new Test();
}

return test;

在铁 rust 里我怎么做这样的事?这是我迄今为止的try :

struct Test {
    time: f64,
    test: Test,
}

impl Test {
    fn get(&self) -> Test {

        if self.test == null {
            // <--

            self.test = Test { time: 1f64 };
        } else {
            self.test
        }
    }
}

推荐答案

在运行时无法检测到未初始化的变量,因为编译器不会让您走那么远.

但是,如果希望存储可选值,Option<...>类型就很方便了.然后可以使用matchif let语句判断:

let mut x: Option<f32> = None;
// ...

x = Some(3.5);
// ...

if let Some(value) = x {
    println!("x has value: {}", value);
}
else {
    println!("x is not set");
}

Rust相关问答推荐

如何在Rust中为具有多个数据持有者的enum变体编写文档 comments ?

什么是谓词的简短和简洁类型

为什么类型需要在这个代码中手动指定,在rust?

Rust:跨多个线程使用hashmap Arc和rwlock

为什么BitVec缺少Serialize trait?

使用Clap时如何将String作为Into Str参数传递?

如何将像烫手山芋一样不透明的值从一个Enum构造函数移动到下一个构造函数?

这是不是在不造成嵌套的情况下从枚举中取出想要的变体的惯用方法?

在本例中,为什么我不能一次多次borrow 可变变量?

对于已经被认为是未定义行为的相同数据,纯粹存在`&;[u32]`和`&;mut[u32]`吗?

`*mut[T]`与`*mut T`的区别

JSON5中的变量类型(serde)

应为关联类型,找到类型参数

如何对一个特征的两个实现进行单元测试?

如何强制匹配的返回类型为()?

tokio::sync::broadcast::Receiver 不是克隆

Rust 如何将链表推到前面?

在给定 Rust 谓词的情况下,将 Some 转换为 None 的惯用方法是什么?

打印 `format_args!` 时borrow 时临时值丢失

深度嵌套枚举的清洁匹配臂