Phi*_*lip 9 performance functional-programming function anonymous-function julia
编辑尝试解决@ user2864740的编辑和评论:我想知道是否有任何与0.4rc1/rc2特别相关的信息,或者特别是来自其中一个Julia开发人员的策略或建议比下面引用的更近(特别是@ StefanKarpinski的Jan 2014年答案在#6下面).谢谢
请参阅例如
(作为一个相当缺乏经验的Julia用户)我对这些信息的最佳综合,其中一些似乎已过时,最佳做法是"避免这样做"或"使用FastAnonymous.jl".
我想知道最新的最新方法和最好的方法是什么.
[更长版本:]
特别是,假设我有一个很大的功能层次结构.我希望能够做类似的事情
function transform(function_one::Function{from A to B},
function_two::Function{from B to C},
function_three::Function{from A to D})
function::Function{from Set{A} to Dict{C,D}}(set_of_As::Set{A})
Dict{C,D}([function_two(function_one(a)) => function_three(a)
for a in set_of_As])
end
end
Run Code Online (Sandbox Code Playgroud)
请不要太过字面意思.这是一个更为一般的转换形式的狭隘例子,无论转换的具体细节如何,我都希望能够做到这一点,但我想以这样的方式做到这一点,我不必担心(太多)关于检查性能(即,除了我在任何非函数与函数作为参数的情况下应用的正常担忧)每次我写一个行为这样的函数.
例如,在我理想的世界中,正确的答案是"只要你@anon
在用这些函数作为参数调用这个函数之前注释每个输入函数,那么你就可以做到尽可能好,而无需调整到你传递的具体论据的具体情况."
如果这是真的,很好 - 我只是想知道这是否是正确的解释,或者如果没有,如果有一些资源我可以阅读这个主题更接近"逻辑"呈现的综合比这里的链接集合(在这个问题上,这更像是集体意识或思想史的流.
答案仍然是"使用FastAnonymous.jl",或手动创建"函子类型"(请参阅NumericFuns.jl).
如果您正在使用julia 0.4,FastAnonymous.jl的工作方式与官方"快速关闭"最终将在基础julia中的工作方式基本相同.请参阅https://github.com/JuliaLang/julia/issues/11452#issuecomment-125854499.(FastAnonymous在julia 0.3上以非常不同的方式实现,并且有更多的弱点.)