所以问题很简单,内联究竟做了什么以及何时应该在Elixir中使用?
通过内联我的意思是:@compile {:inline, myfun: 1}
P.S。我知道Erlang文档here中有关于这个主题的信息,但我仍然不确定我理解。
答案 0 :(得分:19)
当你内联一个函数时,它的调用将在编译时被函数体本身替换。这可用于从特定函数调用中挤出最后一点性能,消除单个函数调用的开销。不幸的是,它还会使堆栈跟踪更难以读取,因为原始函数在编译代码中实际上不存在。因此,当您使用内联时,您应该确实确信内联函数是防弹的,否则您将使代码更难调试。
除非你有一个名为的简单函数,否则我真的不会理解内联。 Take a look at the Elixir source code to get a feeling使用内联的情况 - 您将找到在列表,地图等上运行的基本功能,并且可能会非常频繁地调用。请注意,即使在Elixir源代码中,也非常谨慎地使用内联,因为在极少数情况下您只能从中受益。