Types 朱莉娅:将复合类型的字段作为参数传递
考虑下面的例子Types 朱莉娅:将复合类型的字段作为参数传递,types,julia,composite-types,Types,Julia,Composite Types,考虑下面的例子 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!这样它就可以在一个字段中而不是
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!这样它就可以在一个字段中而不是整个对象中执行。例如:testFunc2!价值。a,价值2。然而,我不断地发现这个错误:
LoadError:LoadError:语法:值。a不是有效的函数参数名称
我想这样做是因为在我的实际代码中,我想应用testFunc!在结构值的循环中递归,例如testFunc!价值a.a2,价值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。还有一个约定是函数名应该全部小写,尽管这似乎不那么严格