假设我打算编写一个赛马博彩应用程序,我想要一个可以有四个离散值的 RaceResult
类:Win
、Place
、Show
和“空对象”类 Lose
。
我是从 C# 背景开始接触 Ruby 的,我通常会为此使用 enum
,或者可能是私有(private)构造函数创建的一系列静态只读字段,如下所示:
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 查询来查找我要查找的信息时遇到问题。
编辑:在第一个答案中,我得到了一些很好的方法来处理我只想要一个命名的原始值的情况。但是,如果我有兴趣扩展它的行为,我需要一个自定义类。有没有办法修改常量方法来使用类?
最佳答案
不确定我是否理解您的要求,但是 Hash 怎么样?哪个更像 ruby ?
race_results = { win: 1, place: 2, show: 3, lose: 4 }
关于具有有限离散值的 Ruby 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24771198/