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