您将如何在Ruby中实现这个Java枚举类?
我从Java类中获得了以下代码:您将如何在Ruby中实现这个Java枚举类?,java,ruby,enums,enumeration,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
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子句的内置功能来完成的。您可以从回顾上一篇文章开始:感谢您的参考,但我已经看过了该线程,仍然只能获得上面的ruby代码。非常感谢。这似乎很直截了当,不客气。事实上,在我从java切换到ruby的过程中,最让我头疼的事情是在OOP范式中停止思考,因为OOP更像是一种负担而不是翅膀。实际上,OP所问的似乎是一种确定字符串是否在集合中的方法。如果是这样的话,Set类会做得很好。如果目的是将字符串映射到符号,则需要哈希。也许您还需要从一个符号转换为一个字符串,在这种情况下,两个哈希可能很有用。核心可以通过分解任何逻辑来改进,这样基础就可以使用不同的字符串和符号进行重用。