R型识别的工作原理



我已经研究过R使用动态类型,但我想了解更多关于它的信息。解释器如何理解像下面这样的对象是数字?

var <- 5
str(var) 
OUTPUT: num 5

R与其他动态类型语言一样,将值存储在特殊的数据结构中,这些数据结构不仅包含其自身的值,还包含关于类型的元信息(通常称为类型"标记"(。

这在R内部构件中有详细描述。

简言之,R中的每个表达式都作为一个S表达式存储在内部,在C代码中表示为一个名为SEXPREC的结构(或其一些小变体(。由于技术原因,SEXPREC结构的实际定义很复杂,但它基本上可以归结为一个标头(元数据(、一个指向属性的指针、一些其他指针,最后是值本身。

在头中,前五位存储一个数字,该数字指定表达式的类型。整数的数字为12,非整数值的数字为13,字符串的数字为9,依此类推

在某个时刻,使用R中表达式的每一段代码都需要检查这些元信息,以确定表达式类型是什么,以及如何对其执行计算。这也是动态语言通常比静态类型语言慢的部分原因:它们需要为(几乎(执行的每一个操作执行额外的记账。

@Stefano,我真的不确定我是否理解你的问题,但我猜R的标记化/语法规则允许解释器推断出裸露的5是数字文字,并且类型信息与值一起保存在符号表(环境(中的var名称下。

最新更新