`
myten
  • 浏览: 131981 次
  • 性别: 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-1.4.0-mac64.dmg julia: 1.4.0 可通过LLVM编译为多个平台的高效本机代码。

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

    Julia学习材料合集

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

    julia.rar_julia_julia 画图_julia画图

    产生julia集,画图,可调整参数,画图,画图

    Julia中文文档.pdf

    julia中文文档,julia教程 julia文档 julia手册 julia中文文档

    Julia 编程手册

    Julia作为灵活的动态语言,适合科学和数值计算,性能可与传统静态类型语言媲美。由于 Julia 的编译器和其它语言比如 Python 或 R 有所不同,一开始您或许会觉得 Julia 中什么样的代码运行效率高,什么样的代码运行...

    Julia中文学习资料

    Julia中文学习资料,入门推荐

    julia中文文档

    julia中文文档,julia教程 julia文档 julia手册 julia中文文档(未翻译完成的)

    julia_zh_cn, 简体中文 Julia.zip

    julia_zh_cn, 简体中文 Julia manual/Julia 手册stdlib/Julia 标准库文档packages/扩展包文档conf.py Sphinx 配置文件note/暂时存放一些笔记之类的东西,将来很有可能移走

    julia_for_dataScience+Julia 1.0 Programming

    julia_for_dataScience与Julia 1.0 Programming的英文版

    Julia 1.0.0中文文档

    整理的Julia的中文文档,希望对大家有用。整理的Julia的中文文档,希望对大家有用。整理的Julia的中文文档,希望对大家有用。整理的Julia的中文文档,希望对大家有用。整理的Julia的中文文档,希望对大家有用。整理...

    julia语言与并行计算ppt.pdf

    中国科学院软件研究所并行实验室ppt,这个Julia编程语言的资料适合初学者。Julia 是一个新的高性能动态高级编程语言。...Julia 是个灵活的动态语言,适合科学和数值计算,性能可与传统静态类型语言媲美。

    julia-0.6.4-linux-64

    通用Linux和FreeBSD二进制文件不需要任何特殊的安装步骤,但您需要确保系统可以找到julia可执行文件。首先,.tar.gz将从下载页面下载的文件解压缩到计算机上的文件夹中。要运行Julia,您可以执行以下任何操作: ...

    julia language v1.0 win64 zip

    由 MIT 主导开发的 Julia 是一种新型编程语言,它将 C 的速度、Ruby 的灵活性 Matlab 的数学表征、Python 的通用编程结合在一起,集众家之所长,近年来成为全球火热程度上升最快的编程语言之一,受到包括 Google、...

    k-means 聚类算法 的朴素julia实现_julia_代码_下载

    k-means 聚类算法 的朴素julia实现_julia_代码_下载

    Julia集图片.rar

    Julia集图片.rar

    Julia-High-performance

    Chapter 1, Julia is Fast, discuses some of the design underpinning the language and its focus on high performance. Chapter 2, Analyzing Julia Performance, provides the tools and techniques you can use...

    各种刚体动力学和运动学算法的Julia实现_julia_代码_下载

    RigidBodyDynamics.jl 是纯 Julia 中的刚体动力学库。它的目标是用户友好和高性能,但在算法可以使用任何(合适的)标量类型的输入调用的意义上也是通用的。这意味着如果需要快速的数值动态评估,用户可以提供Float...

    Julia曲线 OPENCV

    利用OPENCV 生成Julia曲线

    Julia High Performance Programming mobi

    Julia High Performance Programming 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Julia中 的 A*算法_julia_代码_下载

    Julia 中的 A* 算法。其他状态空间搜索算法也作为基线实现。 此包导出astar提供算法通用实现的函数。状态的类型是完全不受限制的,只需提供给定邻居状态的函数和可选的启发式给定状态和目标,算法将找到最佳路径。 ...

Global site tag (gtag.js) - Google Analytics