在从结构的字段创建的环境中,是否有一种方法可以评估表达式?在R中,可以使用函数with
完成此操作:
parameters <- list(a = 1, b = 2, c = 3)
f <- function(parameters, x) {
with(parameters, a + b * x + c * x^2)
}
f(parameters, 7)
# [1] 162
我希望能够在Julia中做类似的事情。例如:
struct Parameters
a::Float64
b::Float64
c::Float64
end
function f(p::Parameters, x)
with(p, a + b * x + c * x^2)
end
p = Parameters(1, 2, 3)
f(p, 7)
答案 0 :(得分:3)
我所知道的最好方法是使用Parameters.jl:
using Parameters
struct Params
a::Float64
b::Float64
c::Float64
end
function f(p::Params, x)
@unpack a, b, c = p
a + b * x + c * x^2
end
p = Params(1, 2, 3)
f(p, 7)
但是,由于在@unpack a, b, c = p
中明确提到了字段名称,所以效果不太好。
更新:
实际上,Parameters.jl还允许您解压缩所有字段,这似乎正是您想要的。但是由于潜在的类型更改/不稳定性,它被认为有些危险。有关更多详细信息,请参见here。示例:
using Parameters
@with_kw struct Params
a::Float64
b::Float64
c::Float64
end
function f(p::Params, x)
@unpack_Params p
a + b * x + c * x^2
end
p = Params(1, 2, 3)
f(p, 7)