W Julii, mam funkcję do skomplikowanej symulacji, monte_carlo_sim()
, która obejmuje wiele parametrów. Wewnątrz tej funkcji muszę wywoływać wiele innych funkcji. Mógłbym pisać autonomiczne funkcje poza z monte_carlo_sim()
, ale wtedy musiałbym przekazać wiele parametrów - z których wiele jest stałych w tej funkcji - które poświęciłyby elegancję i jasność (i być może nie wykorzystałyby faktu że są to zmienne stałe?). Czy istnieje powód, aby nie uwzględniać funkcji w ramach funkcji? Jako zabawny przykład tutaj temperatura T
jest stała, a jeśli nie chcę przekazać tej zmiennej do mojej funkcji compute_Boltzmann()
, mógłbym wykonać następujące czynności. Czy coś jest z tym nie tak?Funkcje wewnątrz funkcji w Julia
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
Ewentualnie mógłbym zdefiniować nowy typ const SimulationParameters
i przekazać to do compute_Boltzmann
zamiast i pisanie compute_Boltzmann
poza funkcją monte_carlo_sim
jak here? Czy to jest lepsze? W takim razie przekazywałbym więcej informacji, niż bym potrzebował.