当然可以!Julia 拥有一套强大且灵活的数据类型系统,支持静态类型检查,同时又具有动态语言的灵活性。下面是 Julia 中最常用的数据类型整理与讲解。
🧱 一、基本数据类型
类型 | 示例 | 说明 |
---|---|---|
Int | 42 | 整数类型(如 Int64 ) |
Float64 | 3.14 | 浮点数 |
Bool | true , false | 布尔值 |
Char | 'a' | 字符 |
String | "hello" | 字符串 |
typeof(42) # Int64
typeof(3.14) # Float64
typeof("hi") # String
typeof('A') # Char
typeof(true) # Bool
🔣 二、字符串类型
s = "Julia"
length(s) # 字符个数
s[1] # 第一个字符 => 'J'
字符串是不可变的,拼接可以使用 *
:
greeting = "Hello, " * "Julia" # => "Hello, Julia"
📚 三、集合类型(容器类型)
✅ 数组(Array)
a = [1, 2, 3]
typeof(a) # Vector{Int64},即一维数组
✅ 元组(Tuple)
t = (1, "hello", true)
typeof(t) # Tuple{Int64, String, Bool}
✅ 字典(Dict)
d = Dict("a" => 1, "b" => 2)
typeof(d) # Dict{String, Int64}
✅ 集合(Set)
s = Set([1, 2, 2, 3])
⚖️ 四、类型转换
Float64(3) # => 3.0
Int(3.99) # => 3
string(42) # => "42"
parse(Int, "123") # => 123
🧪 五、类型判断与比较
isa(3.14, Float64) # true
isa("hi", String) # true
typeof(1) == Int # true
🏗️ 六、自定义类型(结构体)
struct Person
name::String
age::Int
end
p = Person("Alice", 30)
p.name # => "Alice"
p.age # => 30
struct
定义的是不可变类型,使用mutable struct
可以创建可变字段。
📊 七、数值类型的层级关系(类型系统)
Julia 使用多层类型系统:
Number
├── Real
│ ├── Integer
│ └── AbstractFloat
└── Complex
isa(5, Real) # true
isa(5.0, AbstractFloat) # true
📘 八、Any、Union、Nothing 等特殊类型
Any
:所有类型的超类型Nothing
:用于无返回值或空占位Missing
:用于数据缺失Union{T1, T2}
:表示可以是多种类型
x::Union{Int, Nothing} = nothing
🔧 九、类型注解与参数化类型
x::Int = 42 # 类型注解
function f(x::Float64)::Int # 参数和返回值类型
return round(Int, x)
end
参数化数组:
Vector{Int} # 等价于 Array{Int, 1}
Matrix{Float64} # 二维数组
✅ 十、小结:常见数据类型表
分类 | 类型 | 示例 |
---|---|---|
数值 | Int64 , Float64 | 1 , 3.14 |
布尔 | Bool | true , false |
字符 | Char , String | 'A' , "Hi" |
容器 | Array , Tuple , Dict | [1,2] , (a,b) |
特殊 | Nothing , Missing | nothing , missing |
复合 | struct , mutable struct | struct Foo ... end |
如果你想深入了解 类型系统设计(抽象类型、子类型)、多重派发机制、类型稳定性优化,我可以继续为你讲解。或者你也可以告诉我你接下来想练习什么样的代码例子,我来给你定制 🚀
发表回复