如何定义一个与字段值具有相同数量参数的外部构造函数?我想做的是这样的:
struct data
x
y
end
function data(x, y)
return data(x-y, x*y)
end
但是它显然会引起stackoverflow。
答案 0 :(得分:0)
基于所有有用的评论,感谢所有人,我更改了答案。这是Julia 1.0.0中可能包含的示例。我本人正在学习Julia,所以也许进一步的注释可以改善此示例代码。
# File test_code2.jl
struct Data
x
y
Data(x, y) = new(x - y, x * y)
end
test_data = Data(105, 5)
println("Constructor example: test_data = Data(105, 5)")
println("test_data now is...: ", test_data)
#= Output
julia> include("test_code2.jl")
Constructor example: test_data = Data(105, 5)
test_data now is...: Data(100, 525)
=#
答案 1 :(得分:0)
这对我有用
julia> struct datatype
x
y
end
julia> function datatype_create(a,b)
datatype(a - b, a * b)
end
datatype_create (generic function with 1 method)
julia> methods(datatype_create)
# 1 method for generic function "datatype_create":
[1] datatype_create(a, b) in Main at none:2
julia> methods(datatype)
# 1 method for generic function "(::Type)":
[1] datatype(x, y) in Main at none:2
julia> a = datatype_create(105,5)
datatype(100, 525)
julia> b = datatype_create(1+2im,3-4im)
datatype(-2 + 6im, 11 + 2im)
julia> c = datatype_create([1 2;3 4],[4 5;6 7])
datatype([-3 -3; -3 -3], [16 19; 36 43])
julia> d = datatype_create(1.5,0.2)
datatype(1.3, 0.30000000000000004)
如果您绝对在意识形态上屈从于使用外部构造函数,那么您可以执行以下操作
julia> datatype(a,b,dummy) = datatype(a - b,a * b)
datatype
julia> e = datatype(105,5,"dummy")
datatype(100, 525)
使用MACRO强大功能的安特曼解决方案
julia> macro datatype(a,b)
return :( datatype($a - $b , $a * $b) )
end
@datatype (macro with 1 method)
julia> f = @datatype( 105 , 5 )
datatype(100, 525)