管理機器人出廠設定。
機器人從產線上下來時,還沒有名字。
第一次啟動機器人時,會隨機產生一個名字,格式是兩個大寫字母後面接著三個數字,例如 RX837 或 BC811。
偶爾我們需要把機器人重設回出廠設定,這表示它的名字會被清除。 下一次你詢問時,這台機器人會以一個新的隨機名字回應。
名字必須是隨機的:不能遵循可預測的順序。 使用隨機名字意味著有名稱碰撞的風險。 你的解法必須確保每一台現有的機器人都擁有唯一的名字。
測試套件預設只會產生約 100 個名稱。 有效的名稱大約有 70 萬個,因此發生碰撞的機率很小。 除了測試套件之外,不妨也用其他方式測試你的解法是否會發生碰撞。
這個練習延續我們對 Julia 型別系統的探索,這次要談的是可變型別,並帶我們認識亂數產生。
我們可以想像,把機器人重設回原廠設定就像動一場手術:它會對對象做一些改變,但不會把它換掉。 我們也可以把問題建模成「重設機器人就是建立一個新機器人」,但不是每個問題都能只用不可變資料結構來建模(即使是純函式語言,在它們的執行環境裡也得處理可變性!)。
在 Julia 裡,會改變引數的函式依慣例會加上後綴!。
所以我們用來做這件事的方法會叫做reset!。
這只是個慣例,但幾乎所有公開的 Julia 程式碼都遵循它,而你或許也會認同它相當有幫助喔!
你需要定義一個用來產生唯一名稱的方法、一個描述機器人的結構、一個重設機器人的方法,以及一個取得機器人名稱的方法。
一開始設計程式時,不妨先讓它單純產生一個隨機名稱給機器人(先別擔心碰撞問題),之後再來思考並設計一套能避免產生重複名稱的機制,這可能會對你很有幫助。 設計時請仔細思考:當名稱逐漸用盡時,名稱產生的執行時間會如何變化?你想對呼叫方提供什麼樣的保證?