传统上,我用c ++和Java编程,现在我开始学习ruby.
那么我的问题是,像ruby这样的语言如何在内部实现它们的数组和哈希数据结构,以便它们可以同时保存任何类型?我知道在Java中,每个类都是从对象派生的,这可能是实现这一点的一种方法,但我想知道是否还有其他方法.例如,在c ++中,如果我想实现一个可以同时保存多种类型值(无关系)的动态数组,我该怎么做呢?
为了澄清,我不是指通用编程或模板,因为它们只是为类型创建一个新的集合接口.我指的是这样的结构:
array = [1, "hello", someClass];
他们中的大多数大致如你用C++获得通过创建一个相同vector(或list,deque的,等等)boost::any,或者类似的东西.
也就是说,它们基本上将一些标记附加到每种类型的对象,因为它存储在内存中.当他们存储对象时,他们存储标记.当他们读取一个对象时,他们会查看标签以确定是什么类型的对象.当然,它们也在内部处理大部分内容,因此您不必编写代码来确定您刚从集合中检索到的对象类型.
如果不清楚:"标签"只是分配给每种类型的唯一编号.如果您正在处理的系统具有原始类型,则通常会为每个系统预先分配一个类型编号.同样,您创建的每个类都会获得一个分配给它的唯一编号.
要在C++中执行此操作,通常会创建一个标记的中央注册表.注册类型时,会收到一个用于标记该类型对象的唯一编号.当一种语言直接支持它时,它会自动注册类型并为每个类型选择一个唯一的标记.
虽然这可能是实现此类事情的最常用方法,但它绝对不是唯一的方法.例如,也可以为特定类型指定特定的存储范围.分配给定类型的对象时,始终从该类型的地址范围分配.当您创建"对象"的集合时,您实际上并不是存储对象本身,而是存储包含对象地址的内容.由于对象是按地址隔离的,因此您可以根据指针的值来确定对象的类型.