抽象类型

常见抽象类型:

  • Any最广义的抽象类型
  • Number
  • Real实数
  • Integar整数
  • Signed有符号整数
  • Unsigned无符号整数
  • Abstract啥其它抽象类型,包括FloatArrayChar……

可以用<:标记抽象类型从属关系,例如Integar <: Real,有逆向操作>:,可以串联,<: Any可以省略
自定义抽象类型例子:

  1. abstract type MyNumType <: Number end

原始类型定义例子:

primitive type MyChar <: AbstractChar 8#= 占用比特数,暂时只能为8的倍数 =# end

普通结构体

基本格式例子

struct a
    x::Int# 标记类型
    y
end
  • 使用a.xa.y访问元素
  • 如果要求结构体可修改,应在struct前加上mutable
  • 内部构造函数:名字为结构体名,可以调用一个特殊函数new,参数依次为各个元素
  • 外部构造函数:可以调用特殊函数,名字为结构体名,如果没有内部构造函数,会自动生成

示例

mutable struct Three
    x::Int
    y::Int
    z::Int
    function Three()
        return new(0,0,0)
    end
end
function CreateThree(i::Int)
    t=Three()
    t.x=i
    return t
end

泛型

结构体格式例子

struct a{W} where Integar <: W <: Number# 如果是<:Any,可以省略
    x::W
    y
    z::AbstractVector{W}
end

函数格式

function d(m::a{W}) where W <: Real
    println(m.y)
end

示例

mutable struct Cat{T} where T <: AbstractString
    id::UInt
    name::T
    food::AbstractVector{T}
end
function getid(Winter::Cat{T}) where T <: AbstractString
    return Winter.id
end