gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:46:30 26 4
gpt4 key购买 nike

我有来自 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com