里面的空结构Box::new()需要大括号吗?如果没有,有没有更喜欢的风格?
struct Empty;
// are these equivalent?
fn get_empty_box() -> Box<Empty> {
Box::new(Empty)
}
fn get_empty_box_alt() -> Box<Empty> {
Box::new(Empty {})
}
Run Code Online (Sandbox Code Playgroud)
取决于它们是如何定义的。
如果它们被定义为struct Foo {}那么是的。
如果它们被定义为struct Foo();那么它们需要括号或大括号,但带大括号的情况并不常见。
如果它们被定义为struct Foo;那么它们不需要大括号(尽管它们可以接受它们)并且通常在没有大括号的情况下实例化。
其技术原因是struct Foo;,除了结构体本身之外,还定义了一个包含该结构体实例的同名常量。那是,const Foo: Foo = Foo {};。当你拼写时Foo不带大括号,你只需复制这个常量。
以类似的方式,元组结构体 ( struct Foo();) 除了结构体本身之外,还定义了一个实例化它的函数:fn Foo() -> Foo { Foo {} }。
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |