Functions inside a function in Julia

Viewed 6449

In Julia, I have a function for a complicated simulation, monte_carlo_sim() that involves many parameters. Inside this function, I need to call many other functions. I could write stand-alone functions outside of monte_carlo_sim(), but then I'd need to pass many parameters-- many of which are constant inside this function-- which would sacrifice elegance and clarity (and perhaps not take advantage of the fact that these are constant variables?). Is there a performance reason to not include functions within functions? As a toy example here, the temperature T is constant, and if I don't want to pass this variable to my function compute_Boltzmann(), I could do the following. Is there anything wrong with this?

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

Alternatively, I could define a new const type SimulationParameters and pass this to compute_Boltzmann instead, and writing compute_Boltzmann outside of the monte_carlo_sim function as here? Is this better? I'd be passing more information than I'd need in this case, though.

2 Answers
Related