假设我们有一个复合类型:
mutable struct MyType{TF<:AbstractFloat, TI<:Integer}
a::TF
b::TF
end
Run Code Online (Sandbox Code Playgroud)
我们定义一个构造函数
function MyType(a; b = 1.0)
return MyType(a, b)
end
Run Code Online (Sandbox Code Playgroud)
我可以MyType通过a's的数组进行广播,但是如何为b's进行广播?
我试着做
MyType.([1.0, 2.0, 3.0]; [:b, 1.0, :b, 2.0, :b, 3.0,])
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用。
请注意,上面的示例完全是人为的。实际上,我有一个包含许多字段的复合类型,其中许多字段是使用关键字参数构造的,我只想将其中的一些更改为存储在数组中的不同值。
我不认为你可以用点符号来做到这一点,但是,你可以手动构建广播调用:
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)
Run Code Online (Sandbox Code Playgroud)