`
myten
  • 浏览: 134058 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Julia之类型的蹩脚之处

 
阅读更多

面向对象,耳熟能详。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 的重要资源之一。文档中包括了 Julia 的基本语法、数据类型、控制流、函数、数组、字符串、异常处理等方面的内容。 2. 变量和命名规范 在 Julia 中,变量名可以由字母、数字、下划线...

    julia中文文档

    它的性能之所以卓越,得益于其强大的类型推断系统、即时(JIT)编译以及LLVM技术的支持,这些特性使得Julia在代码优化和执行效率方面表现出色。 Julia的核心语言设计非常简洁,其标准库几乎全部使用Julia自身编写,这...

    julia.rar_julia_julia 画图_julia画图

    在Julia中,我们可以利用其丰富的库来创建各种类型的图表,包括二维和三维图像,这对于数据可视化和科学研究非常有用。 **Julia中的绘图库** 1. **Plots.jl**:这是Julia中最常用和功能强大的绘图库,它提供了一个...

    Julia中文文档.pdf

    整数类型有无符号和有符号之分,而浮点数类型遵循IEEE标准。在浮点数运算中,可能出现溢出行为、除法错误等异常情况。Julia还提供了任意精度算术的支持,即可以处理超出标准浮点数精度的计算。 4. 数学运算和初等...

    Julia-Introduction.pdf

    数组是Julia中最基本的数据结构之一,用于存储一系列相同类型的元素,而元组则是一种不可变的复合数据类型。文档提到了数组和元组的存储以及数组的排序方法。 类型系统是Julia语言的一个重要特性。文档中提到了...

    Julia中文文档----免费实用

    - **整数**:Julia支持多种整数类型,包括有符号和无符号整数,如Int8、Int16、Int32、Int64、Int128以及它们的无符号对应类型。需要注意的是,整数运算可能会遇到溢出问题,当超出类型范围时,结果可能不按预期进行...

    程序_julia_

    2. **多重-dispatch**:Julia的核心特性之一是多重调度,即函数的行为可以根据其输入参数的类型进行选择。这使得编写泛型代码变得极其高效。 3. **动态类型**:Julia是动态类型的语言,这意味着变量的类型在运行时...

    Julia中文手册1.1版本

    在Julia手册中,变量的作用域和生命周期是被详细讨论的主题之一。这是因为理解变量的作用域对于编写出高效、无误的代码至关重要。Julia对变量的作用域有着严格的规则,包括局部变量、全局变量以及常量的作用域。此外...

    Julia 1.0.0中文文档

    - **多维数组**: 多维数组是 Julia 的核心数据结构之一,广泛应用于数值计算领域。 - **缺失值处理**: 支持专门的 `missing` 类型来表示缺失数据,方便进行数据分析和处理。 - **网络编程与流**: 提供了用于网络通信...

    julia 中文手册

    - Julia强调性能优势,特别是在大数据处理领域,其性能是决定性的因素之一。 - Julia是免费开源的,并且采用MIT协议许可。 - Julia的自定义类型与内置类型一样高效,且代码无需向量化也可以运行得很快。 - Julia...

    julia-1.4.0-mac64.dmg julia: 1.4.0 可通过LLVM编译为多个平台的高效本机代码。

    Julia具有丰富的描述性数据类型语言,并且类型声明可用于阐明和巩固程序。 Julia使用多重调度作为范例,使表达许多面向对象和功能性编程模式变得容易。它提供异步I / O,调试,日志记录,性能分析,程序包管理器等...

    Julia 集合。

    标题 "Julia 集合" 指的是 Julia 语言中的集合数据类型。在 Julia 中,集合是一种存储和操作一组唯一元素的数据结构。这些集合包括数组(Array)、字典(Dict)、集(Set)等。集合是编程中常用的概念,它们允许我们...

    julia完整安装包

    在本文件中,我们提供了Julia 1.1.0的完整安装包,这使得用户能够轻松地开始他们的Julia编程之旅。 **1. Julia 1.1.0 版本特点** - **性能提升**:Julia 1.1.0在1.0的基础上进一步优化了性能,提供更快的运行速度...

    JuliaPro-1.5.3-1_build-319 最新版

    **JuliaPro 1.5.3-1_build-319 最新版:高效便捷的Julia编程环境** JuliaPro是专为Julia编程语言设计的一款集成开发环境(IDE),旨在提供一个优化的、用户友好的编程环境,以提高Julia代码的编写效率和调试体验。...

    Julia 中文手册 - v1.1

    多重调度是Julia的核心特性之一,它允许函数根据传入参数的类型来选择最佳实现。这意味着开发者可以轻松地为不同的数据类型定义行为,无需繁琐的条件语句。 3. **元编程**: Julia 支持高度灵活的元编程,开发者...

    Julia学习材料合集

    六册Julia学习材料,可用于突击学习: 《Beginning Julia Programming》 《Beginning Julia Programming For Engineers and Scientists》 《Julia High performance》 《learning julia》 《Mastering Julia》 ...

    Julia_资料.zip

    Julia的类型系统是其强大之处之一。它支持静态和动态类型,并且具有多重 dispatch(多态)的功能。这意味着函数的行为可以根据传入参数的类型而改变。例如,你可以定义一个函数处理整数和浮点数,而无需重复编写代码...

    Julia High Performance Programming

    2. **多重 dispatch**:Julia 的核心特性之一是多重调度,即函数可以根据传入参数的类型选择不同的实现。这种设计使得代码更加模块化,同时提高了性能,因为每个函数版本都可以针对特定类型进行优化。 3. **内建...

    julia 1.0正式版

    **Julia 1.0 正式版:高性能科学计算的新选择** Julia,作为一种开源的高级编程语言,自2012年发布以来,以其高效、动态、易读的特性逐渐在科学...如果你还没尝试过Julia,现在正是一个好时机,开始你的Julia之旅吧!

    Julia语言官方文档PDF版

    - **类型声明**:虽然Julia是一种动态类型语言,但它支持类型注解,可以帮助提高代码的可读性和调试效率。 - **类型检查**:Julia的类型系统允许开发者指定参数类型,从而在编译时捕获错误。 9. **方法与构造器**...

Global site tag (gtag.js) - Google Analytics