具有与字段值相同数量的参数的外部构造函数

时间:2018-10-16 02:57:32

标签: julia

如何定义一个与字段值具有相同数量参数的外部构造函数?我想做的是这样的:

struct data
    x
    y
end

function data(x, y) 
    return data(x-y, x*y)
end

但是它显然会引起stackoverflow。

2 个答案:

答案 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)