char hello[] = "hello"; #C
hello = [ h , e , l , l , o ] #Ruby
如果我用Ruby输出hello[0]的类,它会显示“String”。这是因为Ruby中存在单引号字符串,而且似乎没有字符类型的概念。有一天,我对同事说他有一个字符数组,他说“不,我没有,我有一个字符串数组”。挑剔,是的,但从技术上讲,也许他是正确的。来自C语言的世界,我倾向于不把一个字符看作字符串。是否同意上面的hello数组是字符串数组而不是字符数组?
char hello[] = "hello"; #C
hello = [ h , e , l , l , o ] #Ruby
如果我用Ruby输出hello[0]的类,它会显示“String”。这是因为Ruby中存在单引号字符串,而且似乎没有字符类型的概念。有一天,我对同事说他有一个字符数组,他说“不,我没有,我有一个字符串数组”。挑剔,是的,但从技术上讲,也许他是正确的。来自C语言的世界,我倾向于不把一个字符看作字符串。是否同意上面的hello数组是字符串数组而不是字符数组?
在C语言中,字符不同于字符串(字符串是一个字符数组)。Ruby没有单独的字符类型。字符串可以包含任意数量的字符,Fixnums可以包含字符的ASCII值,并使用#chr方法转换为包含该字符的可打印字符串。
Ruby中单引号和双引号字符串语法之间的差异与对字符串进行了多少预处理(例如插值)有关。
你的同事是对的,Ruby似乎没有任何类型的Character类。
>> c .class
=> String
对在C语言中,字符串表示为C-string,它基本上是一个以零结尾的字符数组,而Ruby中的string是一个用更复杂的方式存储其内容的类。你可以将它的任何部分提取到一个新的String中,Ruby可能不会给你更低的访问权限。在C中,你可以直接访问它的内存,Ruby比这抽象得多。
是的,Ruby中没有char类,只有String。(请注意,在C标准中,char被定义为1个字节,但unicode字符的情况并非如此)。