R的switch语句不是一种特殊形式,所以它很慢吗?

在大多数带有switch语句的语言中,它switch是一种特殊的形式,旨在延迟评估可能性,并且编译器知道如何根据给定的输入优化语句的选择。R,大多已经很懒了,不需要其中的一些。然而,R 的switch语句仍然是一个函数调用,而不是任何一种特殊的形式。这是否意味着 R 的switch语句比它是一种特殊形式时要慢?或者 R 的解释器是否知道优化它,好像它是一种特殊形式?

回答

如果您查看switch文件src/main/builtin.c中的内部代码,您可以阅读第 1009-1025 行:

这是一个 SPECIALSXP,因此需要根据需要评估参数。

SPECIALSXP 意思是:

no  SEXPTYPE    Description
7   SPECIALSXP  special functions

Soswitch实际上是一个特殊的函数,它将未计算的参数传递给内部函数。

进一步阅读从第 1030 行到第 1104 行的源代码表明,如 中所述?switch,该函数要么处理character要么number以简单且未完全优化的方式处理。

这可能解释了为什么switch在例如需要二进制搜索的情况下不是特别快。

  • No knock on your answer that I just upvoted, but this tautology made me smile : "arguments need to be evaluated as needed."

以上是R的switch语句不是一种特殊形式,所以它很慢吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>