【发布时间】:2009-03-18 01:02:34
【问题描述】:
"foo"[0] = ?b # "boo"
我正在查看上面的示例并试图弄清楚:
- “?b”如何暗示字符“b”?
-
为什么有必要? - 我不能写这个吗:
"foo"[0] = 'b' # "嘘"
【问题讨论】:
"foo"[0] = ?b # "boo"
我正在查看上面的示例并试图弄清楚:
为什么有必要? - 我不能写这个吗:
"foo"[0] = 'b' # "嘘"
【问题讨论】:
埃德·斯旺仁:?返回 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 在 1.8 中获得字符串到数字的转换,现在可以使用 'a'.ord。
【讨论】:
此更改与 Ruby 1.9 的 UTF-8 更新有关。
? 的 Ruby 1.8 版本仅适用于单字节字符。在 1.9 中,他们更新了所有内容以使用多字节字符。问题是,不清楚应该从?€ 返回什么整数。
他们通过更改返回的内容来解决它。在 1.9 中,以下都是单元素字符串并且是等价的:
?€
'€'
"€"
"\u20AC"
?\u20AC
他们应该放弃符号 IMO,而不是(有点随机地)改变行为。不过,它甚至没有被正式弃用。
【讨论】:
?返回字符的字符代码。 Here is a relevant post on this.
【讨论】:
在某些语言(Pascal、Python)中,不存在字符:它们只是长度为 1 的字符串。
在其他语言(C、Lisp)中,存在字符并且具有不同的语法,例如 'x' 或 #\x。
Ruby 大部分时间都支持“字符不存在”,但有时似乎并不能完全确定这种选择。如果您确实希望将 chars 作为数据类型,Ruby 已经为 '' 和 "" 赋予了含义,因此 ?x 似乎与 char 文字的任何其他选项一样合理。
对我来说,这只是说出你的意思的问题。您也可以说 foo[0]=98,但是当您真正指的是一个字符时,您使用的是整数。当你的意思是一个字符对我来说看起来同样奇怪时使用字符串:它们支持的操作集几乎完全不同。一个是另一个的序列。您不会让 Math.sqrt 获取数字列表,而只是碰巧只查看第一个数字。您不会因为已经支持“整数列表”而从语言中省略“整数”。
(实际上,Lisp 1.0 就是这样做的——教堂数字代表一切!——但性能非常糟糕,所以这是 Lisp 1.5 的巨大进步之一,它可以在 1962 年用作真正的语言。)
【讨论】: