我对Ruby很陌生,并且正在研究基础知识,并遇到了一个问题。
当我尝试打印变量的第一个字母时,它会打印一个数字。
代码是。
name = "Max"
print name[0]
但不是打印字母M,而是打印77?
有人可以告诉我我做错了吗?
答案 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码
我也是新的Ruby程序员。我也在学习Ruby,所以我发现上面的书是值得的,虽然我到目前为止只设法阅读前70页左右,我肯定会尝试完成这本书: - )