有没有办法检查字段的可变性?

adv*_*adv 2 rust

就像是:

let x = 5;
if x.isMut {
    // do stuff
} else {
    // do other stuff
}
Run Code Online (Sandbox Code Playgroud)

您可以尝试使错误处理超载,但这是一种反模式。

Luk*_*odt 9

您在标题中提到“字段”。字段不具有“可变性”属性。您的代码建议您实际上要询问变量绑定的可变性。

无法在运行时找出变量绑定是否可变。变量绑定的此属性在编译时始终是已知的,并且仅在编译时才相关。因此,在运行时检查此对象实际上没有意义,因为检查将始终为“要么” true或“始终” false

除了“绑定可变性”之外,还有“参考可变性”,基本上是&T和之间的区别&mut T。您可以通过使用一些特征欺骗来在运行时进行检查。但是,在运行时进行检查也没有意义,因为它不允许您对这些信息做任何有趣的事情。

最后,通过内部可变性容器(例如RefCell和)进行运行时借用Mutex。这些确实有专用的方法来检查可以可变借用的东西。

这些来自动态语言的内容对于您来说似乎真的很奇怪,这很正常。只要继续学习Rust(例如通过阅读本书),您很快就会知道为什么在Rust的背景下您最初提出的问题确实看起来很奇怪。