如何将构造函数添加到 Julia 中的类型别名?

Har*_*din 5 constructor type-alias julia

我有一个 type Milkshake,其中包含一个flavor字段。我想要另一种类型,Order,它只包含一个Milkshakes列表;因此,我使用了一个typealias.

julia> VERSION
v"0.5.1"

julia> type Milkshake
           flavor::String
       end

julia> typealias Order Array{Milkshake, 1}
Array{Milkshake,1}

julia> Order([Milkshake("Chocolate"), Milkshake("Vanilla")])
2-element Array{Milkshake,1}:
 Milkshake("Chocolate")
 Milkshake("Vanilla")  
Run Code Online (Sandbox Code Playgroud)

不过,我想向 中添加一个构造函数Order,以便我可以通过简单地使用flavor字符串来初始化订单。但是,当我尝试定义执行此操作的构造函数时,该定义奇怪地返回 type Array{Milkshake, 1}。

julia> Order(milkshakes::String...) = Order(map(Milkshake, milkshakes))
Array{Milkshake,1}
Run Code Online (Sandbox Code Playgroud)

运行时,会产生以下错误。

julia> Order("chocolate", "vanilla")
ERROR: MethodError: Cannot `convert` an object of type Tuple{Milkshake,Milkshake} to an object of type Array{Milkshake,1}
This may have arisen from a call to the constructor Array{Milkshake,1}(...),
since type constructors fall back to convert methods.
 in Array{Milkshake,1}(::String, ::String) at ./REPL[3]:1
Run Code Online (Sandbox Code Playgroud)

如何将此构造函数添加到Order typealias?

Dan*_*etz 5

Order(milkshakes::String...) = Order(map(Milkshake,collect(milkshakes))) 作品。

定义了它后,可以按如下方式构造 Order:

julia> Order("Chocolate","Vanilla")
2-element Array{Milkshake,1}:
 Milkshake("Chocolate")
 Milkshake("Vanilla")  
Run Code Online (Sandbox Code Playgroud)

  • `Order(milkshakes::String...) = [Milkshake(shake) 用于奶昔中的奶昔]` 具有更好的性能,对我来说似乎更简单。 (4认同)