java - 您将如何在 Ruby 中实现这个 Java 枚举类?

标签 java ruby enums enumeration

我有来自 Java 类的以下代码:

enum TokenType {
  CHR("[a-z]"),
  INTEGER("[0-9]"),
  OP_EQUALS("\\="),
  OP_PLUS  ("\\+"),
  OP_MINUS("\\-"),
  OP_MULTIPLY("\\*"),
  OP_DIVIDE("\\/"),
  OP_LESS("\\<"),
  LOGIC_AND("and"),
  LOGIC_NOT("not"),
  LOGIC_TRUE("true"),
  LOGIC_FALSE("false"),
  PUNCT_LEFTPAREN("\\("),
  PUNCT_RIGHTPAREN("\\)"),
  PUNCT_SEMIC("\\;"),
  EOF("\\#"),
  ;

  private TokenType(String ch) {
    this.tokenClass = ch;
  }
  String tokenClass;

  public static TokenType parse(String in) {
    for (TokenType type : TokenType.values()) {
      if (in.matches(type.tokenClass)) {
        return type;
      }
    }
    return null;
  }

}

作为 Ruby 新手,我正在尝试在 Ruby 中实现这一点。越简单越好。我根据这里的一些帖子尝试了以下内容,但似乎无法完成。我希望该类有一个 parse() 方法,该方法将输入字符串与所有枚举选项相匹配,如果没有模式匹配,则返回 null。这是我到目前为止所尝试过的:

 class TokenType
  attr_accessor :tokenClass
  def initialize(str)
     @tokenClass = str
  end

    CHR = new("[a-z]")
    INTEGER = new("[0-9]"),
    OP_EQUALS = new("\\="),
    OP_PLUS = new("\\+"),
    OP_MINUS= new("\\-"),
    OP_MULTIPLY= new("\\*"),
    OP_DIVIDE = new("\\/"),
    OP_LESS = new("\\<"),
    LOGIC_AND = new("and"),
    LOGIC_NOT = new("not"),
    LOGIC_TRUE = new("true"),
    LOGIC_FALSE = new("false"),
    PUNCT_LEFTPAREN = new("\\("),
    PUNCT_RIGHTPAREN = new("\\)"),
    PUNCT_SEMIC = new("\\;"),
    EOF= new("\\#"),

    class << self
      private :new
    end   

    def TokenType.parse(str_in)

    end
end

有什么想法或想法吗?谢谢。

最佳答案

您正在尝试使用 ruby​​ 语法编写 java 代码。我会执行以下操作:

def parse str
  case str
  when 'a'..'z' then CHR
  when 0..9 then INTEGER
  …
  end
end

您可以决定在类中定义常量或执行任何您想要的操作,但匹配是通过 ruby​​ case 子句的内置功能为您完成的。

关于java - 您将如何在 Ruby 中实现这个 Java 枚举类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15753847/

相关文章:

java - 查看文件是否读取了 Java 中的内容

Ruby Sequel 模型对创建和不更新进行验证

ruby - 遍历 ENV 并将结果写入 Chef 中的文件

python - 从 str 和 Enum 继承有哪些注意事项

java - 遇到 Java 错误 : class, 接口(interface)或预期的枚举

java - 从可能的多种类型中保存单个枚举值

java - 当我关闭 Tomcat 时,spring-rabbit 不会停止它启动的线程

java - Spark SQL - 从另一个配置单元表错误将数据插入配置单元表

java - Eclipse 插件内的图像路径

ruby - 在 Ruby 中测试整个脚本