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

时间:2009-03-18 01:02:34

标签: ruby string

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

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

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

    “foo”[0] ='b'#“boo”

4 个答案:

答案 0 :(得分:10)

  Ed Swangren:?返回a的字符代码   字符。

不在Ruby 1.9中。从1.9开始,?a返回'a'。见这里:Son of 10 things to be aware of in 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

修改:非常 changes in Ruby 1.9的完整描述。

另一个修改:请注意,如果您希望通过'a'.ord获得1.8中的字符串编号转换,则可以使用?a

答案 1 :(得分:5)

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

{1}的Ruby 1.8版本仅适用于单字节字符。在1.9中,他们更新了所有内容以使用多字节字符。麻烦的是,不清楚应该从?返回什么整数。

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

?€

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

答案 2 :(得分:0)

?返回字符的字符代码。 Here is a relevant post on this.

答案 3 :(得分:0)

在某些语言(Pascal,Python)中,字符不存在:它们只是长度为1的字符串。

在其他语言(C,Lisp)中,字符存在且具有不同的语法,如“x”或#\ x。

Ruby大多数都站在“不存在的字符”的一边,但有时似乎并不完全确定这种选择。如果希望将字符作为数据类型,Ruby已经为''和'“分配了含义,那么?x似乎与char文字的任何其他选项一样合理。

对我而言,这只是说出你的意思。你也可以说foo [0] = 98,但是当你真正意味着一个角色时你正在使用一个整数。当你的意思是一个角色看起来对我来说同样奇怪时使用一个字符串:他们支持的操作集几乎完全不同。一个是另一个的序列。你不会让Math.sqrt得到一个数字列表,只是碰巧只看第一个。你不会因为你已经支持“整数列表”而从语言中省略“整数”。

(实际上,Lisp 1.0就是这样 - 教会的数字就是一切! - 但性能很糟糕,所以这是Lisp 1.5的巨大进步之一,使它在1962年成为一种真正的语言。)