结构体字段默认是私有的和不可变的(结构体也不可变)。 他们的访问修饰符可以用pub
和mut
来改变。 总共有5种可能的选择:
struct Foo { a int // private immutable (default) mut: b int // private mutable c int // (you can list multiple fields with the same access modifier) pub: d int // public immmutable (readonly) pub mut: e int // public, but mutable only in parent module __global: f int // public and mutable both inside and outside parent module } // (not recommended to use, that's why the 'global' keyword starts with __)
例如,这是内置模块中定义的字符串类型:
struct string { str byteptr pub: len int }
从这个定义中很容易看出字符串是一个不可变类型。
内置字符串数据的字节指针根本不可访问。 len字段是公开的,但不是可变的。
fn main() { str := 'hello' len := str.len // OK str.len++ // Compilation error }