编辑,以尝试解决@ user2864740的编辑和评论:我想知道是否有任何与0.4rc1/rc2特别相关的信息,或者特别是来自Julia开发人员的策略或建议,而不是下面引用的最新信息(尤其是@ StefanKarpinski在2014年1月的第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
请不要从字面上看代码。这是更通用的转换形式的狭窄示例,无论转换的具体细节如何,我都希望能够执行此操作,但是我希望以不必担心的方式进行转换每次编写这种行为的函数时(过多)关于检查性能的问题(也就是说,超出了我在任何非函数与参数作为参数的情况下都会遇到的普通担忧)。
例如,在我理想的世界中,正确的答案是“只要在使用这些函数作为参数调用此函数之前,先用
@anon
注释每个输入函数,那么您将尽一切可能而无需调整为您要传递的具体参数的具体情况。”如果是这样,那太好了-我只是想知道这是否是正确的解释,或者,是否有我可以阅读的关于该主题的一些资源比此处的链接集合更接近“逻辑上”呈现的综合信息(这更多是关于这个问题的集体意识或思想史)。
最佳答案
答案仍然是“使用FastAnonymous.jl”,或手动创建“functor类型”(请参阅NumericFuns.jl)。
如果您使用的是julia 0.4,则FastAnonymous.jl的工作方式与官方“快速关闭”最终将在基本julia中工作的方式相同。参见https://github.com/JuliaLang/julia/issues/11452#issuecomment-125854499。
(FastAnonymous在julia 0.3上以非常不同的方式实现,并且还有很多弱点。)
关于performance - 如何在不牺牲性能的情况下将函数作为参数传递给Julia中的其他函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32726342/