【发布时间】:2022-01-16 09:11:14
【问题描述】:
我研究过 R 使用动态类型,但我想了解更多有关它的信息。 解释器如何理解像下面这样的对象是数字的?
var <- 5
str(var)
OUTPUT: num 5
【问题讨论】:
标签: r types typing dynamic-typing dynamictype
我研究过 R 使用动态类型,但我想了解更多有关它的信息。 解释器如何理解像下面这样的对象是数字的?
var <- 5
str(var)
OUTPUT: num 5
【问题讨论】:
标签: r types typing dynamic-typing dynamictype
@Stefano,我不确定我是否理解你的问题,但我猜 R 的标记化/语法规则允许解释器推断出裸露的 5 是一个数字文字,并且该类型信息被保存在一起使用符号表(环境)中的值,在 var 名称下。
【讨论】:
R 与其他动态类型语言一样,将值存储在特殊的数据结构中,其中不仅包含它自身的值,还包含 关于类型的元信息(通常称为类型“标签”)。
这在R internals中有详细描述。
简而言之,R 中的每个表达式在内部存储为 S-expression,在 C 代码中表示为称为 SEXPREC 的结构(或其一些小的变体)。出于技术原因,SEXPREC 结构的实际定义很复杂,但它基本上归结为一个标题(元数据)、一个指向属性的指针、一些其他指针,最后是值本身。
在标题中,前五位存储一个数字,该数字指定表达式的类型。整数有数字 12,非整数数值有数字 13,字符串有数字 9,依此类推。
在 R 中使用表达式的每一段代码都需要在某些时候检查此元信息以确定表达式类型是什么,以及如何对其执行计算。这就是为什么动态语言通常比静态类型语言慢的部分原因:它们需要为(几乎)它们执行的每一个操作执行额外的记录。
【讨论】: