struct A {
mut a : Int
}
fn init {
let a = { a : 432 }
a.a = 42
println(a.a) // 42
}
一个immut的struct里的mut field为什么可以被修改?
struct A {
mut a : Int
}
fn init {
let a = { a : 432 }
a.a = 42
println(a.a) // 42
}
一个immut的struct里的mut field为什么可以被修改?
第二行的 mut
不加不能改,加了才能改,这没问题吧?毕竟js的 const
也这样。
还是说你觉得要let mut a才能改a.a?
对的,a本身不是mut的话按道理a.a也不能被修改
这属于把mut对应的概念扩大化了,大多数函数式编程语言的mut都只针对绑定对象而言,对象本身是否以及能否修改则是另一回事。
rust这边有个帖子讨论了类似的情况,Structs' field-level mutability control at instantiation (not at definition) - #3 by kornel - language design - Rust Internals
a是一个引用;a不是mut代表你不能修改a所绑定的对象(指不能发生重新绑定)。至于那个对象本身能发生什么修改,那是另一回事。这并不是一个immutable structure。
这个是老生常谈的话题,例如C中也有const int * const ptr
这个概念。