julia - Julia函数内部的函数

标签 julia

在Julia中,我有一个用于复杂模拟的函数,monte_carlo_sim()涉及许多参数。在此函数内部,我需要调用许多其他函数。我可以在monte_carlo_sim()之外编写独立的函数,但是随后我需要传递许多参数-其中许多在该函数内部是恒定的-这会牺牲美观和清晰度(并且可能无法利用事实这些是常量变量?)。是否出于性能原因不将功能包括在功能内?作为一个玩具示例,温度T是恒定的,并且如果我不想将此变量传递给函数compute_Boltzmann(),则可以执行以下操作。这有什么问题吗?

function monte_carlo_sim(temp::Float64, N::Int)
    const T = temp

    function compute_Boltzmann(energy::Float64)
         return exp(-energy/T)
    end

    # later call this function many times
    for i = 1:1000
        energy = compute_energy()
        b = compute_Boltzmann(energy)
    end
end


或者,我可以定义一个新的const类型SimulationParameters并将其传递给compute_Boltzmann,然后在compute_Boltzmann函数之外将monte_carlo_sim编写为here?这是否更好?不过,在这种情况下,我传递的信息会超出所需。

最佳答案

自从google带领我来到这里,也许我添加了一条评论:

嵌套函数曾经比较慢,例如,请参见github上的this discussion在2013年。但是现在不再是:在v0.6上完全运行测试,现在它们的速度相同。

如果我(像问题一样)内部函数隐式依赖于外部函数中定义的事物,这对我来说仍然是正确的,如果它是一个独立的函数,则必须显式地传递它。

关于julia - Julia函数内部的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36164367/

相关文章:

julia - Julia 中最小值的位置

combinatorics - Julia:带有替换的唯一 n 个元素集

arrays - 从 Julia 中的大型数组中对列集进行子采样的最快方法

Julia:子集数据框

julia - 减少 DifferentialEquations.jl 中的内存分配

Julia Matrix{AbstractFloat} 类型问题

python - 在 Python 中加载 JLD 文件

arrays - 在 Julia 中将 Array{Array{Float64,1},1} 转换为 Array{Float64,2}

Julia GLM - 使用 devresid 进行绘图

macros - 是否可以在一行中使用多个宏?