资源修饰符(Access modifiers)
结构体字段默认是私有的和不可变的(结构体也不可变)。 他们的访问修饰符可以用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
pub mut mut:
f int // public and mutable both inside and outside parent module
} // (not recommended to use, that's why it's so verbose)
例如,这是内置模块中定义的字符串类型:
struct string {
str byteptr
pub:
len int
}
从这个定义中很容易看出字符串是一个不可变类型。
内置字符串数据的字节指针根本不可访问。 len字段是公开的,但不是可变的。
fn main() {
str := 'hello'
len := str.len // OK
str.len++ // Compilation error
}