E0009#
结构体从未被构造。
错误示例#
///|
pub struct A { // Warning: the struct A is never constructed
value : Int
}
///|
priv struct B { // Warning: the struct B is never constructed
value : Int
}
///|
fn B::get(a : B) -> Int {
a.value
}
建议#
pub
可见性修饰符只允许其他包通过点语法(a.value
)或模式匹配来访问结构体。因此,如果你希望其他包能够构造结构体,你应该使用 pub(all)
可见性修饰符。
///|
pub(all) struct A {
value : Int
}
然而,如果你不希望其他包构造结构体,这可能是由于你代码的不完整或错误。以下是一些常见情况:
你计划使用智能构造器或工厂函数来构造结构体,但你忘记了或尚未实现它们。
你打算保持结构体私有以控制其实例化,但可能忘记了在其自己的包中提供这样的方法。
在这些情况下,你应该考虑在自己的包内提供构造结构体的方法。
///|
priv struct B {
value : Int
}
///|
fn B::new(value : Int) -> B {
B::{ value, }
}