📜  朱莉娅构造函数

📅  最后修改于: 2022-05-13 01:55:22.155000             🧑  作者: Mango

朱莉娅构造函数

Julia 中的构造函数是用于创建对象的函数。它们专门用于创建复合类型对象的实例。复合类型是命名字段的集合,也可以将其视为单个值。当将类型对象分配给以函数形式传递的一组参数值时,Julia 允许将类型对象创建为构造函数。构造函数作用于 Julia 中称为结构类型的基本数据结构。使用预定义的关键字struct创建类型。

struct Structure_name
    Field1
    Field2
end

constructor1 = Structure_name(value1, value2)

constructor1.Field1
constructor1.Field2

例子:

# Creating a structure
struct Geeks
      
    # Defining Fields
    x
    y
end
  
# Creating a constructor
Geek_constructor = Geeks(10, 20)
  
# Creating constructor objects
Geek_constructor.x
Geek_constructor.y

Julia-Constructors-01

在上面的代码中,当通过传递参数值使用函数创建构造函数时,这些值会在创建对象时自动实例化到结构的字段中。

构造函数的类型

Julia 允许根据它们的行为创建两种类型的构造函数。这些都是:

  • 外部构造函数
  • 内部构造函数

外部构造函数——
外部构造方法是在类型声明块之外定义的。外部构造函数就像 Julia 中的任何其他函数一样,它的功能取决于它内部定义的所有方法。只需定义一个新方法,就可以将新功能添加到构造函数中。
例子:

# Creating a structure
struct Geeks
    x
    y
end
  
# Creating a constructor with
# same value for both fields
Geek_constructor(x) = Geeks(x, x)
  
# Passing single argument
Geek_constructor(10)

Julia-Constructors-02
与上面的代码一样,构造函数是用一个值创建的,并且该单个值被分配给两个字段。
因此,像普通方法一样创建的构造函数方法称为外部构造函数。外部构造方法只能通过调用其他构造方法来创建新实例。

内部构造函数——
与可以像任何普通函数一样在源代码中的任何位置定义构造函数的外部构造方法不同,内部构造方法只能在类型声明的块内定义。它就像外部构造方法一样,除了它还可以访问一个称为new的特殊预定义函数。在类型块中定义构造函数将限制对象创建,使其根据构造函数创建期间定义的条件进行绑定。

例子:

# Defining type
struct Geeks
  
    # Field
    x::Real
      
    # Creating Inner Constructor
    Geeks(x) = typeof(x) != Int64 ? error("Integer value not found") : new(x)
end
  
# Object Creation
Geeks(10)
Geeks(10.5)

Julia-Constructors-03

参数构造函数

参数构造函数类型是在类型声明时预定义结构的数据类型的类型。此结构的字段在类型声明时隐含在数据类型中。在参数构造函数中,显式定义参数类型的构造函数调用被转换为隐含的字段类型。因此,函数调用时参数隐含的类型必须一致,否则会引发错误,但任何具有匹配类型的值对都可以传递给构造函数。

例子:

# Defining type
struct Geeks{T <: Real}
  
    # Fields
    x::T
    y::T
end
  
# Creating Outer constructor
Geeks(x::T, y::T) where {T<:Real} = Geeks{T}(x, y);
  
# Constructor calling
Geeks(10, 20)
Geeks(10, 20.5)

Julia-Constructors-04