资源修饰符(Access modifiers)


结构体字段默认是私有的和不可变的(结构体也不可变)。 他们的访问修饰符可以用pubmut来改变。 总共有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  
}