管理机器人的出厂设置。
机器人刚走下生产线时,还没有名字。
第一次启动机器人时,会随机生成一个名字,格式为两个大写字母后跟三个数字,例如 RX837 或 BC811。
偶尔我们需要把机器人重置为出厂设置,这意味着它的名字会被清除。 下次你再询问时,这个机器人会给出一个新的随机名字。
名字必须是随机的:不能遵循可预测的序列。 使用随机名字意味着存在名字冲突的风险。 你的解答必须确保每个已存在的机器人都有独一无二的名字。
测试套件默认只会生成约 100 个名字。 合法的名字约有 70 万个,因此它撞名的概率很小。 除了测试套件之外,你还可以考虑用其他方式来测试你的解答是否会撞名。
本次练习将继续探索 Julia 的类型系统,这次的主题是可变类型,同时还会带我们认识随机数生成。
我们不妨把将机器人恢复出厂设置想象成一次手术:它会对手术对象做出改变,但不会把它换掉。 我们也可以这样对问题建模:每重置一次机器人就创建一个新机器人。但并非所有问题都能只用不可变数据结构来建模(即使是纯函数式语言,其运行时内部也要处理可变性!)。
在 Julia 中,按惯例,会修改自身参数的函数带一个后缀!。
因此,我们用来完成这件事的方法将叫作reset!。
这只是一项惯例,但几乎所有公开发布的 Julia 代码都遵循它,你或许也会认同它相当有用!
你需要定义生成唯一名字的方法、描述机器人的结构、重置机器人的方法,以及获取机器人名字的方法。
你不妨先设计一个只负责给机器人输出随机名字的程序(先不考虑撞名),然后再思考并设计一套能够避免发出重复名字的方案。 在设计时,要仔细考虑随着可用名字逐渐耗尽,名字生成的运行时间会如何变化。你想向调用方提供什么样的保证?