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

Lik*_*han 3 julia

我现在正在观看 Lionel Zoubritzky 在 JuliaCon 2018 上发表的Engineering Julia for Speed演讲。演讲中提到了一个名为removetypeabout 的函数13:24。我想知道这个函数是如何定义的?谢谢。

Bog*_*ski 5

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

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

inferencebarrier(@nospecialize(x)) = Ref{Any}(x)[]
Run Code Online (Sandbox Code Playgroud)

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