Julia:带关键字参数的广播函数

时间:2018-02-12 00:35:27

标签: function julia

假设我们有一个复合类型:

mutable struct MyType{TF<:AbstractFloat, TI<:Integer}
a::TF
b::TF
end

我们定义一个构造函数

function MyType(a; b = 1.0)
    return MyType(a, b)
end

我可以在MyType的数组上播放a,但我怎样才能为b播放?

我试着做

MyType.([1.0, 2.0, 3.0]; [:b, 1.0, :b, 2.0, :b, 3.0,]) 

但是,这不起作用。

请注意,上述示例完全是人为的。实际上,我有一个复合类型,它接受许多字段,其中许多是使用关键字参数构造的,我只想将它们中的一些更改为存储在数组中的不同值。

1 个答案:

答案 0 :(得分:2)

我认为你不能用点符号做到这一点,但是,你可以手动构建广播呼叫:

julia> struct Foo
           a::Int
           b::Int
           Foo(a; b = 1) = new(a, b)
       end

julia> broadcast((x, y) -> Foo(x, b = y), [1,2,3], [4,5,6])
3-element Array{Foo,1}:
 Foo(1, 4)
 Foo(2, 5)
 Foo(3, 6)

julia> broadcast((x, y) -> Foo(x; y), [1,2,3], [:b=>4,:b=>5,:b=>6])
3-element Array{Foo,1}:
 Foo(1, 4)
 Foo(2, 5)
 Foo(3, 6)