为什么"?b"在Ruby中意味着'b'?

4 ruby string

"foo"[0] = ?b # "boo"
Run Code Online (Sandbox Code Playgroud)

我正在看上面的例子并试图找出:

  1. "?b"如何暗示字符'b'?
  2. 为什么有必要? - 我不能写这个:

    "foo"[0] ='b'#"boo"

Tel*_*hus 10

Ed Swangren:?返回字符的字符代码.

不是在Ruby 1.9中.从1.9开始,?a返回'a'.看到这里:Ruby 1.9中需要注意的十件事之子!

telemachus ~ $ ~/bin/ruby -v
ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-linux]
telemachus ~ $ ~/bin/ruby -e 'char = ?a; puts char'
a
telemachus ~ $ /usr/bin/ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
telemachus ~ $ /usr/bin/ruby -e 'char = ?a; puts char'
97
Run Code Online (Sandbox Code Playgroud)

编辑:一个非常充分说明在Ruby 1.9的变化.

另一个编辑:请注意,'a'.ord如果您希望字符串在1.8 via中进行数字转换,现在可以使用?a.


Sar*_*Mei 5

此更改与Ruby 1.9的UTF-8更新有关.

Ruby 1.8版本?仅使用单字节字符.在1.9中,他们更新了所有内容以使用多字节字符.麻烦的是,不清楚应该从哪个整数返回?€.

他们通过改变它的回报来解决它.在1.9中,以下所有内容都是单元素字符串并且是等效的:

?€
'€'
"€"
"\u20AC"
?\u20AC
Run Code Online (Sandbox Code Playgroud)

他们应该放弃符号,IMO,而不是(有点随机)改变行为.但它甚至没有正式弃用.