5
char hello[] = "hello"; #C
hello = ['h', 'e', 'l', 'l', 'o'] #Ruby

如果我在 Ruby 中输出 hello[0] 类,它会显示“String”。这是因为 Ruby 中存在单引号字符串,并且似乎没有 char 类型的概念。前几天我对我的同事说他有一个字符数组,他说“不,我没有,我有一个字符串数组”。挑剔,是的,但从技术上讲,也许他是正确的。来自 CI 世界的人往往不会将单个字符视为字符串。是否同意上面的 hello 数组是字符串数组而不是字符数组?

4

4 回答 4

15

在 C 中,字符不同于字符串(字符串是字符数组)。Ruby 没有单独的字符类型。字符串可以保存任意数量的字符,Fixnums 可以保存字符的 ASCII 值,并使用 #chr 方法将其转换为包含该字符的可打印字符串。

Ruby 中单引号和双引号字符串语法的区别在于对字符串进行了多少预处理(例如插值)。

于 2009-04-05T20:43:27.137 回答
2

你的同事是对的,Ruby 似乎没有任何 Character 类。

>> 'c'.class                                                            
=> String
于 2009-04-05T20:38:57.180 回答
2

是的。在 C 中,字符串表示为 C-String,它基本上是一个以零结尾的字符数组,而 Ruby 中的 String 是一个以更复杂的方式存储其内容的类。您可以将它的任何部分提取到一个新的字符串中,而 Ruby 可能不会让您降低对它的访问权限。在 C 中,您可以直接访问它的内存,而 Ruby 比这要抽象得多。

于 2009-04-05T20:41:28.547 回答
0

是的,Ruby 中没有 char 类,只有 String。(请注意,char 在 C 标准中定义为 1 个字节,但 unicode 字符不是这种情况)。

于 2009-04-05T20:40:26.537 回答