朱莉娅:传递的复合类型的字段作为参数

朱莉娅:传递的复合类型的字段作为参数

问题描述:

考虑下面的例子朱莉娅:传递的复合类型的字段作为参数

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) 

BTW:有一个在朱莉娅硬性约定类型名称应该大写:ValueStruct,不valueStruct。还有一个约定,函数名应该全部小写,尽管这似乎不太严格。