Julia中函数名称的大写字母



我对Julia还很陌生,对下面的代码感到困惑。在函数LucasTree被定义后,它被再次用作lt。Julia是否有某种角色,我可以回忆起使用大写缩写的函数?如果是,我在哪里可以找到这个功能的好参考?

function LucasTree(;γ = 2.0,
β = 0.95,
α = 0.9,
σ = 0.1,
grid_size = 100)
ϕ = LogNormal(0.0, σ)
shocks = rand(ϕ, 500)
# build a grid with mass around stationary distribution
ssd = σ / sqrt(1 - α^2)
grid_min, grid_max = exp(-4ssd), exp(4ssd)
grid = range(grid_min, grid_max, length = grid_size)
# set h(y) = β * int u'(G(y,z)) G(y,z) ϕ(dz)
h = similar(grid)
for (i, y) in enumerate(grid)
h[i] = β * mean((y^α .* shocks).^(1 - γ))
end
return (γ = γ, β = β, α = α, σ = σ, ϕ = ϕ, grid = grid, shocks = shocks, h = h)
end
function lucas_operator(lt, f)
# unpack input
@unpack grid, α, β, h = lt
z = lt.shocks
Af = LinearInterpolation(grid, f, extrapolation_bc=Line())
Tf = [ h[i] + β * mean(Af.(grid[i]^α .* z)) for i in 1:length(grid) ]
return Tf
end

不,这不存在。它太不唯一了,不实用,而且Julia中的函数名按照惯例应该完全小写(结构/类型可以是CamelCase,但不能是函数,构造函数*可能除外(。

无论如何,在您发布的代码中,这里发生的一切都是函数lucas_operator接受两个参数,ltf,然后可以在lucas_operator函数中使用。原则上,它们可以是任何东西,无论它们在函数范围外被命名为什么,它们都将在函数范围内被命名为ltf。例如:

function example(foo, bar)
return foo(2*bar)
end

如果你打电话给

example(somereallylongfunctionname, somevariable)

那么它将返回相当于的值

somereallylongfunctionname(2*somevariable)

或类似的

example(SomeImproperlyCapitalizedFunction, somevariable)
# equivalent to SomeImproperlyCapitalizedFunction(2*somevariable)

在任何一种情况下,无论其名称在example函数的范围之外,传递给该函数的第一个参数在函数内都将被称为foo

*关于构造函数:这将是一个用于构造自定义类型的函数。这并不是完全所做的,但它确实返回了一个NamedTuple的实例,然后在后续代码中,该实例似乎被视为类型/结构,因此它可能被视为构造函数。

相关内容

最新更新