我本周早些时候才刚刚开始对Ruby进行修改,但遇到了一些我不太会编码的事情。我正在将用Java编写的扫描仪转换为Ruby以进行类分配,并且我已经深入到本节:
if (Character.isLetter(lookAhead))
{
return id();
}
if (Character.isDigit(lookAhead))
{
return number();
}
lookAhead
是从字符串中选出的单个字符(每次循环时移动一个空格),这两种方法确定它是字符还是数字,并返回适当的 token 类型。我还无法找出与Character.isLetter()
和Character.isDigit()
等效的Ruby。 最佳答案
使用与字母和数字匹配的正则表达式:
def letter?(lookAhead)
lookAhead.match?(/[[:alpha:]]/)
end
def numeric?(lookAhead)
lookAhead.match?(/[[:digit:]]/)
end
这些称为POSIX括号表达式,它们的优点是给定类别下的unicode字符将匹配。例如:'ñ'.match?(/[A-Za-z]/) #=> false
'ñ'.match?(/\w/) #=> false
'ñ'.match?(/[[:alpha:]]/) #=> true
您可以在Ruby’s docs for regular expressions中阅读更多内容。