我本周早些时候才刚刚开始对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中阅读更多内容。

10-08 00:40