"foo"[0] = ?b # "boo"
我正在查看上面的示例并试图找出:
为什么有必要? - 我不能写这个:
“foo”[0] ='b'#“boo”
答案 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年成为一种真正的语言。)