Ruby類比方說,我打算寫賽馬投注的應用,我想一個RaceResult
類,可以有四個離散值:Win
,Place
,Show
和「空對象」類Lose
。有限離散值
我來到紅寶石從C#的背景,我通常會使用enum
這一點,或者是一系列由私人構造器創建的靜態只讀域,像這樣的:
public class RaceResult {
public static RaceResult Win = new RaceResult(1);
// ...
private int lowestPositionToWin;
private RaceResult(int position) {
lowestPositionToWin = position;
}
private bool PaysOut(int placement) {
return placement <= lowestPositionToWin; // logic may be flawed here
}
}
如果班太複雜了,我會重構使用策略模式。
什麼是一種很好的Ruby方法來解決這個需求?我可以創建一個只能有四個實例的類嗎?我在查詢Google查詢時遇到問題,無法找到我要查找的信息。
編輯:在第一個答案中,我已經得到了一些很好的方法來處理我只想要一個命名的原始值的情況。但是,如果我有興趣擴展它的行爲,我需要一個自定義類。有沒有一種方法可以修改常用的使用類的方法?
這更接近我想要的。我怎樣才能將每個常量分配給一個自定義對象? – neontapir
@neontapir查看第一個代碼片段,在這兩種方法中,您只需使用'anyVariable = TheEnum :: SOME_CONSTANT'。第二個片段只是輕鬆生成這些「枚舉」的一種方法。 – Kroltan
@neontapir我沒有閱讀你的編輯,對不起,我會嘗試擴展 – Kroltan