具有有限离散值的 Ruby 类

标签 ruby initialization

假设我打算编写一个赛马博彩应用程序,我想要一个可以有四个离散值的 RaceResult 类:WinPlaceShow 和“空对象”类 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/

相关文章:

javascript - 您怎么知道如何初始化脚本?

c# - 为什么我必须在默认为 0 时为 C# 中的 int 赋值?

ruby-on-rails - 如何显示 future 预订的产品?

ruby-on-rails - rake 数据库 :migrate and db:create not operated with proper database files

ruby-on-rails - 未定义方法 model_name

javascript - 仅在 AngularJS 中完成初始化后才运行 Controller

C - 将未初始化的变量传递给数组元素

perl - 给定/当值未定义时

已定义方法的 Ruby 钩子(Hook)?

javascript - 如何从 Node.js 调用 Ruby?