在Ruby中使用`?`(问号)获取ASCII字符码失败
我处于需要字符的ASCII值的情况(对于Project Euler问题#22 ,如果你想具体),我遇到了一个问题。
作为ruby新手,我search了一下,发现了?
是要走的路: ?A
或者其他什么。 但是,当我将它合并到我的代码中时,该语句的结果是string"A"
– 无字符代码。 与[0]
和slice(0)
同样的问题,理论上这两个都应该返回ASCII码。
我唯一能想到的是这是一个ruby版本问题。 我正在使用1.9.1-p0,从今天下午1.8.6升级。 我从一个Ruby的工作版本中,在同一个目录中,我骗了一些,我想我可能已经有了不捆绑在.zip文件的文件,所以我没有下载它们。
那么为什么我所有的ASCII码都变成了实际的字符呢?
1.9之前的Ruby处理过的字符有点不一致。 ?a
和"a"[0]
将返回一个表示字符ASCII值的整数(通常不是人们所期待的行为),但在实际使用中,字符通常用一个字符的string表示。 在Ruby 1.9中,字符永远不会神秘地变成整数。 如果你想得到一个字符的ASCII值,你可以使用ord
方法,比如?a.ord
(返回97)。
怎么样
"a"[0].ord
为1.8 / 1.9的便携性。
对于1.8和1.9
?a.class == String ? ?a.ord : ?a
要么
"a".class == String ? "a".ord : "a"[0]
find解决scheme。 “string”.ord返回s的ascii码。 看起来像我发现的方法在1.9系列的ruby被打破。
Ruby编程/ ASCII
在1.9之前的ruby版本中,可以使用问号语法。
?a
1.9之后,我们使用ord。
'a'.ord
如果您再次阅读Euler项目的问题22,则会发现您并不是在寻找字符的ASCII值。 问题在找什么,例如字符“A”是1,它在字母表中的位置是“A”,其ASCII值是65。