有没有办法在Julia中强制使用隐藏的默认构造函数?

时间:2019-06-15 20:48:02

标签: julia

我想从外部程序包序列化和反序列化Julia对象。其中一些对象仅具有受限制的内部构造函数,如以下示例所示:

module ExternalModule
  struct SillyType
    f::Float64
    function SillyType(i::Int)
      new(float(i))
    end
  end
end

要从存储的值重建对象/结构(此处,要使用浮点数来重建SillyType,我需要调用默认的构造函数,该构造函数不可用:

julia> ExternalModule.SillyType(2.0)
ERROR: MethodError: no method matching Main.ExternalModule.SillyType(::Float64)

Julia documentation

  

如果定义了任何内部构造方法,则没有默认构造函数   提供了方法:假定您已经提供了自己   以及您需要的所有内部构造函数。

是否有办法解决这种情况,以某种方式强行调用丢失的默认构造函数?那么,最脏的方法是什么?

1 个答案:

答案 0 :(得分:4)

我认为new内部构造函数中的SillyType函数是您要调用的吗?通常只在内部构造函数中允许使用它,但是如果使用宏伪造它,它将仍然运行。试试这个:

julia> macro new(args...)
         return Expr(:new, args...)
       end
@new (macro with 1 method)

julia> @new(SillyType, 4.)
SillyType(4.0)