在Ruby中,“c”被认为是字符还是字符串?或者两者都是?

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

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

15
在C语言中,字符与字符串(一个字符数组)是不同的。Ruby没有单独的字符类型。字符串可以容纳任意数量的字符,Fixnums可以容纳一个字符的ASCII值,并使用#chr方法转换为包含该字符的可打印字符串。
在Ruby中,单引号和双引号字符串语法的区别在于对字符串进行多少预处理(例如插值)。

3
你的同事是对的,Ruby似乎没有任何类型的Character类。
>> 'c'.class                                                            
=> String

2

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


0

是的,在Ruby中没有char类,只有字符串。 (请注意,char在C标准中定义为1字节,但对于Unicode字符并非如此)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接