面向对象,耳熟能详。Julia也算是面向对象的,那么今天说说痛点----类型。
像java允许有父类,抽象类,并且类里边可以定义方法,写起代码来不亦乐乎。
目前的Julia只允许方法属于模块,而不能归属于类。这个实在不爽。但今天说的事情可能会让更多人不爽。
官方文档上的前三个,Abstract Types, Primitive Types,Composite Types
先说抽象类型吧。
我试着自己定义个抽象类型,如官网所讲
abstract type «name» end abstract type «name» <: «supertype» end
假设我需要抽象出一个场景,Student<:Person,学生人群隶属于人类
abstract type Person end
abstract type Student<:Person end
嘿,挺好,到此为止简直是完美。不过,我想,学生这一层就不要在抽象了吧。干脆去掉abstract关键字。
于是乎,意外就出现了。编译执行根本不能通过。我只想fuck 下边的红字提示的作者。
ERROR: LoadError: syntax: extra token "Student" after end of expression
那好吧,退一步,既然是抽象类,总应该有姓名和年龄这两个字段吧。
于是乎我改进一下。
abstract type Person name age:Int64 end
加两个字段吧。然后就又出意外了,无语了。
ERROR: LoadError: syntax: "abstract type" expected "end", got "name"
反了天了啊,不能添加字段在类型里。也就是说type不等同于java 的 class。好吧,这就是抽象类型。
原始类型
官网给出的解释和示范
A primitive type is a concrete type whose data consists of plain old bits. Classic examples of primitive types are integers and floating-point values. Unlike most languages, Julia lets you declare your own primitive types
primitive type «name» «bits» end primitive type «name» <: «supertype» «bits» end
看明白了,允许你自己定义原始类型,很高大上啊,就好比java能让你自己定义和int平起平坐的类型了。但是,有个毛用啊?我要面向对象,不要这些没用的。
最后来看看 官网说的复合类型
Composite types are called records, structs, or objects in various languages. A composite type is a collection of named fields, an instance of which can be treated as a single value. In many languages, composite types are the only kind of user-definable type, and they are by far the most commonly used user-defined type in Julia as well.
一大堆废话,然后又说自己很牛逼啊。
给了个示范例子
struct Foo bar baz::Int qux::Float64 end
我靠,type消失了,变成struct了,之前就说过,这里边不能定义方法只能定义字段。
来来来,试试
struct Student name age::Int8 end s=Student("jack",12) println(s.age) s.age=22
定义个结构体,创建个对象,输出年龄,改变年龄,一切都很流畅啊。但是,抱歉。s.age=22到这里就会报错。
ERROR: LoadError: type Student is immutable
告诉你了,非可变类型。所以,没有 mutable 修饰 struct ,那么就是 final类型咯。。
好,接着说,Student怎么才能具备一个打招呼的功能呢?看来我们需要定义个方法给他
mutable struct Student name age::Int8 sayHi::Function end
这样就OK了,但是具备了这些还是一个抽象的结构体并不是对象。我们需要使用它。
mutable struct Student name age::Int8 sayHi::Function end function jackSayHi() println("GOOD") end s=Student("jack",12,jackSayHi) s.sayHi() function tomSayHi() println("Well") end b=Student("tom",22,tomSayHi) b.sayHi()
完整代码就变成了这样。这一点方法的定义和使用 和C 类似。反正都是在结构体里允许定义,不允许实现。但就是用起来不是那么爽啊。设计者就是要设计成这样,喜欢的人可能会捧到天上。
相关推荐
Julia 的中文文档是学习 Julia 的重要资源之一。文档中包括了 Julia 的基本语法、数据类型、控制流、函数、数组、字符串、异常处理等方面的内容。 2. 变量和命名规范 在 Julia 中,变量名可以由字母、数字、下划线...
它的性能之所以卓越,得益于其强大的类型推断系统、即时(JIT)编译以及LLVM技术的支持,这些特性使得Julia在代码优化和执行效率方面表现出色。 Julia的核心语言设计非常简洁,其标准库几乎全部使用Julia自身编写,这...
在Julia中,我们可以利用其丰富的库来创建各种类型的图表,包括二维和三维图像,这对于数据可视化和科学研究非常有用。 **Julia中的绘图库** 1. **Plots.jl**:这是Julia中最常用和功能强大的绘图库,它提供了一个...
整数类型有无符号和有符号之分,而浮点数类型遵循IEEE标准。在浮点数运算中,可能出现溢出行为、除法错误等异常情况。Julia还提供了任意精度算术的支持,即可以处理超出标准浮点数精度的计算。 4. 数学运算和初等...
数组是Julia中最基本的数据结构之一,用于存储一系列相同类型的元素,而元组则是一种不可变的复合数据类型。文档提到了数组和元组的存储以及数组的排序方法。 类型系统是Julia语言的一个重要特性。文档中提到了...
- **整数**:Julia支持多种整数类型,包括有符号和无符号整数,如Int8、Int16、Int32、Int64、Int128以及它们的无符号对应类型。需要注意的是,整数运算可能会遇到溢出问题,当超出类型范围时,结果可能不按预期进行...
2. **多重-dispatch**:Julia的核心特性之一是多重调度,即函数的行为可以根据其输入参数的类型进行选择。这使得编写泛型代码变得极其高效。 3. **动态类型**:Julia是动态类型的语言,这意味着变量的类型在运行时...
在Julia手册中,变量的作用域和生命周期是被详细讨论的主题之一。这是因为理解变量的作用域对于编写出高效、无误的代码至关重要。Julia对变量的作用域有着严格的规则,包括局部变量、全局变量以及常量的作用域。此外...
- **多维数组**: 多维数组是 Julia 的核心数据结构之一,广泛应用于数值计算领域。 - **缺失值处理**: 支持专门的 `missing` 类型来表示缺失数据,方便进行数据分析和处理。 - **网络编程与流**: 提供了用于网络通信...
- Julia强调性能优势,特别是在大数据处理领域,其性能是决定性的因素之一。 - Julia是免费开源的,并且采用MIT协议许可。 - Julia的自定义类型与内置类型一样高效,且代码无需向量化也可以运行得很快。 - Julia...
Julia具有丰富的描述性数据类型语言,并且类型声明可用于阐明和巩固程序。 Julia使用多重调度作为范例,使表达许多面向对象和功能性编程模式变得容易。它提供异步I / O,调试,日志记录,性能分析,程序包管理器等...
标题 "Julia 集合" 指的是 Julia 语言中的集合数据类型。在 Julia 中,集合是一种存储和操作一组唯一元素的数据结构。这些集合包括数组(Array)、字典(Dict)、集(Set)等。集合是编程中常用的概念,它们允许我们...
在本文件中,我们提供了Julia 1.1.0的完整安装包,这使得用户能够轻松地开始他们的Julia编程之旅。 **1. Julia 1.1.0 版本特点** - **性能提升**:Julia 1.1.0在1.0的基础上进一步优化了性能,提供更快的运行速度...
**JuliaPro 1.5.3-1_build-319 最新版:高效便捷的Julia编程环境** JuliaPro是专为Julia编程语言设计的一款集成开发环境(IDE),旨在提供一个优化的、用户友好的编程环境,以提高Julia代码的编写效率和调试体验。...
多重调度是Julia的核心特性之一,它允许函数根据传入参数的类型来选择最佳实现。这意味着开发者可以轻松地为不同的数据类型定义行为,无需繁琐的条件语句。 3. **元编程**: Julia 支持高度灵活的元编程,开发者...
六册Julia学习材料,可用于突击学习: 《Beginning Julia Programming》 《Beginning Julia Programming For Engineers and Scientists》 《Julia High performance》 《learning julia》 《Mastering Julia》 ...
Julia的类型系统是其强大之处之一。它支持静态和动态类型,并且具有多重 dispatch(多态)的功能。这意味着函数的行为可以根据传入参数的类型而改变。例如,你可以定义一个函数处理整数和浮点数,而无需重复编写代码...
2. **多重 dispatch**:Julia 的核心特性之一是多重调度,即函数可以根据传入参数的类型选择不同的实现。这种设计使得代码更加模块化,同时提高了性能,因为每个函数版本都可以针对特定类型进行优化。 3. **内建...
**Julia 1.0 正式版:高性能科学计算的新选择** Julia,作为一种开源的高级编程语言,自2012年发布以来,以其高效、动态、易读的特性逐渐在科学...如果你还没尝试过Julia,现在正是一个好时机,开始你的Julia之旅吧!
- **类型声明**:虽然Julia是一种动态类型语言,但它支持类型注解,可以帮助提高代码的可读性和调试效率。 - **类型检查**:Julia的类型系统允许开发者指定参数类型,从而在编译时捕获错误。 9. **方法与构造器**...