Julia 构造函数

构造函数[1]是构造新对象,即新复合类型实例的函数。构造类型对象:

type Foo
  bar
  baz
end

julia> foo = Foo(1,2)
Foo(1,2)

julia> foo.bar
1

julia> foo.baz
2

递归数据结构 ,尤其是自引用的数据结构,常需要先构造为非完整状态,再按步骤将其完善。我们有时也可能希望用更少或不同类型的参数更方便的构造对象。Julia 的构造函数可以让包括这些在内的各种需求得到满足。

[1] :关于命名:尽管“构造函数”通常被用来描述创建新对象的函数,它也经常被滥用于特定的构造方法。通常情况下,可以很容易地从上下文推断出到底是“构造函数”还是“构造方法”。

外部构造方法

构造函数与 Julia 中的其它函数一样,它的行为取决于它全部方法的行为的组合。因此,你可以通过定义新方法来给构造函数增加新性能。下例给 Foo 添加了新构造方法,仅输入一个参数,将该参数值赋给 bar 和 baz域:

Foo(x) = Foo(x,x)

julia> Foo(1)
Foo(1,1)
添加 Foo 的零参构造方法,给 bar 和 baz 域赋默认值:

Foo() = Foo(0)

julia> Foo()
Foo(0,0)
这种追加的构造方法被称为 外部 构造方法。它仅能通过提供默认值的方式,调用其它构造方法来构造实例。

内部构造方法

内部 构造方法与外部构造方法类似,但有两个区别:

  1. 它在类型声明块内部被声明,而不是像普通方法一样在外部被声明
  2. 它调用本地已存在的 new 函数,来构造声明块的类型的对象

例如,要声明一个保存实数对的类型,且第一个数不大于第二个数:

type OrderedPair
  x::Real
  y::Real

  OrderedPair(x,y) = x > y ? error("out of order") : new(x,y)
end
仅当 x <= y 时,才会构造 OrderedPair 对象:

julia> OrderedPair(1,2)
OrderedPair(1,2)

julia> OrderedPair(2,1)
ERROR: out of order
 in OrderedPair at none:5

所有的外部构造方法,最终都会调用内部构造方法。

当然,如果类型被声明为 immutable ,它的构造函数的结构就不能变了。这对判断一个类型是否应该是 immutable 时很重要。


联系我们

邮箱 626512443@qq.com
电话 18611320371
QQ 626512443
QQ群 235681453

Copyright © 2015-2019

备案号:京ICP备15003423号-3