代码之家  ›  专栏  ›  技术社区  ›  Likan Zhan

定义一个函数来删除Julia中的对象类型?

  •  0
  • Likan Zhan  · 技术社区  · 3 年前

    我现在正在看演讲 Engineering Julia for Speed 由Lionel Zoubitzky在2018年的JuliaCon上发表。被谈话者提到了一个名为 removetype 在大约 13:24 。我想知道该函数是如何定义的?谢谢

    0 回复  |  直到 3 年前
        1
  •  5
  •   Bogumił Kamiński    3 年前

    这是一个相对较旧的视频,所以我不确定那里使用的是哪个Julia版本,但目前这个功能是 Base.inferencebarrier (至少从Julia 1.6开始——由于未导出,因此它不是公共API的一部分,不应被视为保证在未来定义)。

    幸运的是,自己定义它很容易(我正在复制粘贴当前的定义):

    inferencebarrier(@nospecialize(x)) = Ref{Any}(x)[]
    

    该函数确保编译器无法执行其返回类型的类型推断。如果您想避免过度重新编译代码,它最有用(最大的好处是使用廉价的高阶函数)。