在大多数使用switch
语句的语言中,switch
是一种特殊的形式,可以对延迟进行评估,并且编译器知道如何根据给定的输入来优化语句的选择。 R,大多数已经是懒惰的,不需要其中的一些。但是,R的switch
语句仍然是函数调用,而不是任何特殊形式。这是否意味着R的switch
语句比特殊形式的语句慢?还是R的解释器会像优化特殊形式一样知道对其进行优化?
最佳答案
如果您在文件src/main/builtin.c中查看switch
的内部代码,则可以在第1009-1025行中阅读:
This is a SPECIALSXP, so arguments need to be evaluated as needed.
SPECIALSXP
means:no SEXPTYPE Description
7 SPECIALSXP special functions
因此,switch
实际上是一个special function,它将未经评估的参数传递给内部函数。从源代码行1030到行1104的进一步读取显示,如
?switch
中所述,该函数以简单且未完全优化的方式处理character
或number
。这可能可以解释为什么
switch
在需要例如二进制搜索的情况下不是特别快。
关于R的switch语句不是一种特殊形式,因此它很慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65885943/