Julia:将复合类型的字段作为参数传递

Posted

技术标签:

【中文标题】Julia:将复合类型的字段作为参数传递【英文标题】:Julia: Passing a field of a composite type as argument 【发布时间】:2017-10-05 20:05:14 【问题描述】:

考虑以下示例

struct valueStruct
    a::VectorFloat64
    a2::VectorFloat64 
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

但是,这不是我想要的。在我的实际代码中,我需要有一个灵活的函数,以便我可以将它应用到一个类型的字段中。这可能吗?

【问题讨论】:

【参考方案1】:

我不明白这个问题。这工作正常:

struct ValueStruct
    a::VectorFloat64
    a2::VectorFloat64 
end

function testfunc!(a, b)
    a .*= b
end

values = ValueStruct(ones(10), ones(10))
values2 = 1:10
testfunc!(values.a, values2)

顺便说一句:Julia 中有一个严格的约定,即类型名称应该大写:ValueStruct,而不是valueStruct。还有一个约定是函数名应该全部小写,尽管这似乎不那么严格。

【讨论】:

以上是关于Julia:将复合类型的字段作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章

复合数组类型作为 PostgreSQL 中的 OUTPUT 参数

如何获取 Julia 对象的字段

将私有父类类型作为参数传递 (C2247)

GO语言复合类型01---指针

PL/SQL复合变量

ElasticSearch实战(十三)-复合数据字段类型