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。还有一个约定是函数名应该全部小写,尽管这似乎不那么严格