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

Ruby 打印变量的第一个字母返回一个数字?,ruby,Ruby,我对Ruby还不太熟悉,在学习基础知识时遇到了一个问题 当我试图打印变量的第一个字母时,它打印了一个数字 代码是 name = "Max" print name[0] 但不是打印字母M,而是打印77 有人能告诉我我做错了什么吗?嗯,我通过irb(交互式ruby控制台)运行了你的问题,在查找名称[0]时得到了“M”。您只需在命令行中键入irb就可以打开irb,并自己进行测试 irb > name = "Max" => "Max" irb > print name[0] M

我对Ruby还不太熟悉,在学习基础知识时遇到了一个问题

当我试图打印变量的第一个字母时,它打印了一个数字

代码是

name = "Max"

print name[0]
但不是打印字母M,而是打印77


有人能告诉我我做错了什么吗?

嗯,我通过irb(交互式ruby控制台)运行了你的问题,在查找名称[0]时得到了“M”。您只需在命令行中键入irb就可以打开irb,并自己进行测试

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

您能告诉我有关您请求名称[0]的上下文的更多信息吗?这个名字会被重新分配到其他地方吗?您是否在代码中的任何位置调用.to_i(转换为整数)

这个操作符的行为在不同版本的Ruby中是不同的。您可能正在使用一个旧的,在这种情况下,这是意料之中的

这是一段摘自

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

这一点已经改变,而Ruby的较新版本(1.9.x及以上版本,根据)只是将字符打印为字符串。看

如果传递了单个索引,则在该索引处返回一个字符的子字符串 索引

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

"Mwada"[0]
=> "M"

"Mwada"[0].class
=> String    

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

"Mwada"[0].chr # => "M"
如果它是ruby 1.9.x及以上版本,那么一切都将按照您的预期工作:

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

我刚刚从一本Ruby书籍中查看了这个问题,该书包含了关于Ruby 1.8和Ruby 1.9的信息。这本书被DavidFlanagan和松本幸弘称为Ruby编程语言书

书中说:“在Ruby1.8中,字符串就像字节数组或8位字符代码

s = 'hello' # Ruby 1.8
s[0]        # 104: the ASCII character code for the first character 'h'
Ruby1.9返回单个字符串,而不是单个字符

s = 'hello' # Ruby 1.9
s[0]        # 'h': the first character of the string, as a string 
(请注意,上面的引文中遗漏了一些文字)

我还测试了String.bytes.to_上的一个方法 “Max”,在我的Ruby 1.9环境中

print name.bytes.to_a
[77, 97, 120] => nil 
它打印了“Max”的ASCII码,77是“M”的ASCII码


我也是一名新的Ruby程序员。我也在学习Ruby,所以我觉得上面这本书很有价值,虽然到目前为止我只读了前70页左右,但我一定会努力完成这本书:-)奇怪。当我这样做的时候,我会得到
M=>nil
M
是输出,
nil
print
返回的内容),而不是
77
。您可以尝试
put name[0]
,打印后会出现一个换行符。您的上下文中肯定有更多内容。您使用的是什么版本的ruby?谢谢,我试过了,但它仍然会打印。在您的上下文中,
name
出现了其他问题。如果您只需输入
irb
并在
irb
提示栏键入上面的两行,会发生这种情况吗t?ruby的哪个版本?这不是版本问题。我只是尝试了1.8.7,我的
打印名称输出“Max”。请解释一下您的上下文,或者至少尝试一下我描述的小测试(只是在一个新的
irb
会话中进行)。或者,您的代码的实际外观可能与您在问题陈述中所显示的不完全相同。我试图将名称[0]赋给变量的第一个字母,但当我这样做时,它只是将其值赋为77,而不是M@user3160809如果这对你有帮助,你能考虑接受这个答案吗?)