我想从外部程序包序列化和反序列化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)
如果定义了任何内部构造方法,则没有默认构造函数 提供了方法:假定您已经提供了自己 以及您需要的所有内部构造函数。
是否有办法解决这种情况,以某种方式强行调用丢失的默认构造函数?那么,最脏的方法是什么?
答案 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)