打印变量的第一个字母返回一个数字?

时间:2014-01-04 17:08:02

标签: ruby

我对Ruby很陌生,并且正在研究基础知识,并遇到了一个问题。

当我尝试打印变量的第一个字母时,它会打印一个数字。

代码是。

name = "Max"

print name[0]

但不是打印字母M,而是打印77?

有人可以告诉我我做错了吗?

4 个答案:

答案 0 :(得分:3)

此运算符的行为在各种版本的Ruby中是不同的。您可能正在使用旧版本,在这种情况下,这是可以预期的。

以下是docs for Ruby 1.8.7's String class

的摘录
  

如果传递了一个Fixnum,则返回该字符的代码   位置。

这已经改变,Ruby的较新版本(1.9.x及以上,根据this site)只是将字符打印为字符串。请参阅the docs for Ruby 2.1.0

  

如果传递单个索引,则返回一个字符的子字符串   索引。

Ruby 1.9.3,我碰巧安装在我正在使用的机器上显示完全相同的行为:

"Mwada"[0]
=> "M"

"Mwada"[0].class
=> String    

答案 1 :(得分:3)

如果它是ruby 1.8.x,请在代表字符的数字上运行#chr

"Mwada"[0].chr # => "M"

如果它是1.9.x及以上的红宝石,那么一切都会像你期望的那样工作:

"Mwada"[0] # => "M"

答案 2 :(得分:1)

嗯,我通过irb(交互式红宝石控制台)运行你的问题,并在寻找名字[0]时得到'M'。您只需从命令行输入irb即可打开irb并自行测试。

irb > name = "Max"
=> "Max" 
irb > print name[0]
M => nil

您能告诉我更多关于您请求姓名[0]的背景吗?名字是否已被重新分配给其他人?你在代码中的任何地方调用.to_i(转换为整数)吗?

答案 3 :(得分:1)

我刚从Ruby书中检查了这个问题,其中包含有关Ruby 1.8和Ruby 1.9的信息。这本书被David Flanagan编写为The Ruby Programming Language Book。 Yukihiro Matsumoto。

这本书说:“在Ruby 1.8中,字符串就像一个字节数组或8位字符代码

s = 'hello' # Ruby 1.8
s[0]        # 104: the ASCII character code for the first character 'h'

Ruby 1.9返回单字符字符串而不是字符

s = 'hello' # Ruby 1.9
s[0]        # 'h': the first character of the string, as a string 

(请注意上面的引文中遗漏了一些文字)

直接针对您的问题。我还测试了String.bytes.to_a方法 'Max',在我的Ruby 1.9环境中。

print name.bytes.to_a
[77, 97, 120] => nil 

并打印出“Max”的ASCII码,77是“M”的ASCII码

ASCII Codes

我也是新的Ruby程序员。我也在学习Ruby,所以我发现上面的书是值得的,虽然我到目前为止只设法阅读前70页左右,我肯定会尝试完成这本书: - )