使用`?`(问号)在Ruby中获取ASCII字符代码失败

dor*_*orr 49 ruby ascii char

我正处于需要字符的ASCII值的情况下(对于Project Euler问题#22,如果你想要具体的话),我遇到了一个问题.

作为红宝石的新手,我用Google搜索,发现这?是要走的路:?A或者其他什么.但是当我将它合并到我的代码中时,该语句的结果是字符串"A"-no字符代码.同样的问题,与[0]slice(0),两者理论上应该返回ASCII码.

我唯一能想到的是这是一个ruby版本的问题.我正在使用1.9.1-p0,从今天下午的1.8.6升级.我在同一个目录中欺骗了一个工作版本的Ruby,我想我可能已经有了与.zip文件捆绑在一起的文件了,所以我没有下载它们.

那么为什么我的所有ASCII码都变成了实际的字符呢?

Chu*_*uck 70

Ruby之前处理过的字符有些不一致.?a"a"[0]返回一个表示字符ASCII值的整数(通常不是人们所寻找的行为),但在实际使用中,字符通常由一个字符的字符串表示.在Ruby 1.9中,字符永远不会神秘地变成整数.如果要获取字符的ASCII值,可以使用该ord方法,如?a.ord(返回97).

  • @polska:我想你可能会误解.的?表示我们想要字符'a',所以写`?a.ord`给出97,而简单地写`a.ord`寻找一个名为`a`的变量或方法,如果没有任何东西会抛出一个NameError如果变量"a"不包含字符串,则使用该名称或NoMethodError. (4认同)
  • 是的,你说得对..我误解了。它适用于 ?a.ord 或 "a".ord (2认同)

Rya*_*oun 35

怎么样

"a"[0].ord
Run Code Online (Sandbox Code Playgroud)

适用于1.8/1.9的便携性.


小智 12

对于1.8和1.9

?a.class == String ? ?a.ord : ?a
Run Code Online (Sandbox Code Playgroud)

要么

"a".class == String ? "a".ord : "a"[0]
Run Code Online (Sandbox Code Playgroud)


dor*_*orr 8

找到了解决方案."string".ord返回s的ascii代码.看起来我发现的方法在1.9系列红宝石中被破坏了.

  • @pierr - 但这是问题的答案,而不仅仅是问题的更新 (7认同)
  • 这些方法没有被打破.Chuck解释说,Ruby 1.9以不同的方式定义了他们的行为. (5认同)

hiv*_*eer 7

Ruby编程/ ASCII

在1.9之前的ruby版本中,您可以使用问号语法.

?a
Run Code Online (Sandbox Code Playgroud)

在1.9之后,我们使用ord代替.

'a'.ord    
Run Code Online (Sandbox Code Playgroud)