Julia:将复合类型的字段作为参数传递
Julia: Passing a field of a composite type as argument
考虑以下示例
struct valueStruct
a::Vector{Float64}
a2::Vector{Float64}
end
values = valueStruct(ones(10), ones(10));
values2 = 1:10;
function testFunc!(values, values2)
values.a .= values.a .* values2;
end
我想创建一个函数 testFunc2!
以便它可以接收 field
而不是整个对象。例如:testFunc2!(values.a, values2)
。但是,我不断收到此错误:
LoadError: LoadError: syntax: "values.a" is not a valid function argument name
。
我想这样做是因为在我的实际代码中,我想在结构 values
的循环中递归应用 testFunc!
,例如testFunc!(values.a2, values.a)
。我知道我可以做这样的事情:
function testFunc!(values, values2, n)
values.a .= values.a .* values2;
for i = 1:n
values.a2 .= values.a;
end
end
然而,这不是我想要的。在我的实际代码中,我需要有一个灵活的函数,以便我可以将它应用于一个类型的字段。这可能吗?
我不明白这个问题。这很好用:
struct ValueStruct
a::Vector{Float64}
a2::Vector{Float64}
end
function testfunc!(a, b)
a .*= b
end
values = ValueStruct(ones(10), ones(10))
values2 = 1:10
testfunc!(values.a, values2)
顺便说一句:Julia 中有一个严格的约定,类型名称应该大写:ValueStruct
,而不是 valueStruct
。还有一个约定,函数名应该全部小写,虽然这似乎不太严格。
考虑以下示例
struct valueStruct
a::Vector{Float64}
a2::Vector{Float64}
end
values = valueStruct(ones(10), ones(10));
values2 = 1:10;
function testFunc!(values, values2)
values.a .= values.a .* values2;
end
我想创建一个函数 testFunc2!
以便它可以接收 field
而不是整个对象。例如:testFunc2!(values.a, values2)
。但是,我不断收到此错误:
LoadError: LoadError: syntax: "values.a" is not a valid function argument name
。
我想这样做是因为在我的实际代码中,我想在结构 values
的循环中递归应用 testFunc!
,例如testFunc!(values.a2, values.a)
。我知道我可以做这样的事情:
function testFunc!(values, values2, n)
values.a .= values.a .* values2;
for i = 1:n
values.a2 .= values.a;
end
end
然而,这不是我想要的。在我的实际代码中,我需要有一个灵活的函数,以便我可以将它应用于一个类型的字段。这可能吗?
我不明白这个问题。这很好用:
struct ValueStruct
a::Vector{Float64}
a2::Vector{Float64}
end
function testfunc!(a, b)
a .*= b
end
values = ValueStruct(ones(10), ones(10))
values2 = 1:10
testfunc!(values.a, values2)
顺便说一句:Julia 中有一个严格的约定,类型名称应该大写:ValueStruct
,而不是 valueStruct
。还有一个约定,函数名应该全部小写,虽然这似乎不太严格。