请问像是在java中常用的getter/setter,在rust中对应的形式是怎么样的呢?能给出一些例子吗?刚刚接触rust没几天,因为涉及到一些所有权或者别的什么问题,不知道如何做才是最安全可靠的。
1
共 7 条评论, 1 页
请问像是在java中常用的getter/setter,在rust中对应的形式是怎么样的呢?能给出一些例子吗?刚刚接触rust没几天,因为涉及到一些所有权或者别的什么问题,不知道如何做才是最安全可靠的。
评论区
写评论把java语法清干净学习效率才是最快的,否则你会有太多执念让你无法继续学习
不需要把Java的getter/setter僵化的带入其他语言,你真的需要它吗?
你可以使用 https://crates.io/crates/getset
getter:
API Guidelines: getter 命名规范:https://zjp-cn.github.io/api-guidelines/naming.html#getter-%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83
setter:
一般是分场景,然后按名字区分。比如一个getter,其功能可能是获取可变引用,也可能是获取不可变引用,还可能是获取对象内部一个成员的所有权。
所以getter一般就是分三种写法,如果是第一个,一般叫get_xxx_mut,第二个就是get_xxx,第三个我个人喜欢命名为take_xxx,意为交出所有权,比如获取一个线程池里的线程对象,就可以叫take_one_thread。
当然命名不是死的,像vec的获取尾元素所有权就是pop而不是叫take_last,交出某个索引的元素的所有权叫remove。
rust里区分这几种情况主要是看函数的参数和返回值类型,名字只是辅助识别,重要的是类型,你的类型一定要符合要求,名字可以自己发挥,方便别人看懂意思就行,设计一个getter之前先看其属于上面这三种情况的哪一种。
有所有权相关问题。
比如,rust中的getter,一般可分成两种
.get_xxx()
.get_mut_xxx()
。这样把可改和不可改分开了。其实更不容易犯错。
另外,setter 的主对象一定是 &mut 或 owner。
也可以仿照写 getter/setter。
但是rust中并无强制这种pattern。
在快速开发时,可用模板生成器生成这些API。