目录

一.iex 文件名

二. 关于返回值

三. 库的载入

1. import

2. alias 库名, as: 你喜欢的名字

3. alias 库名

四. @符号

1. 定义模块内常量

2. 编写文档

3. 特化函数输入输出的类型。

五. 类型系统

1. Numbers

Extra(待详细补充!!!!!!)

2. Atoms

Extra

总结


前言

个人备忘录。以免发生突然忘记什么语法下又要查文档还要查半天屁都没找到最后只能重新翻书的情况。

一.iex 文件名

能直接编译指定文件到iex上进行交互。

二. 关于返回值

Elixir默认函数体最后一行为其返回值,如果为函数,那么返回函数的结果,而不是返回函数本身。

三. 库的载入

1. import

直接把整个库load进来,库名都给你扬了。(不用写库名就能直接调用对应的函数)

2. alias 库名, as: 你喜欢的名字

换个名字load进来。调用需要以“你喜欢的名字 . 函数名”形式调用。

3. alias 库名

也是整个load进来,但是不写as的话,会默认为库名的以点分割的最后的字段。

如 alias Geometry.Rectangle, 那么调用时候库名就是Rectangle

四. @符号

1. 定义模块内常量

根据书上所写,此为定义Module attribute(库的属性?)操作符。一般而言,用起来像C语言的宏.

@pi 3.14, 那么整个模块里所有pi都为3.14。(仅限模块内!!!!别他妈以为这是个全局变量)

2. 编写文档

除此以外,对于Elixir的模块的一些固有属性也能进行定义。

defmodule HelloFuckingWorld do@moduledoc "There is no fucking world"@doc "Hello World!"def hello_world doIO.puts("Hello world!")end
end

这个很重要!Elixir某种程度上来说可以算得上面向文档编程。

@moduledoc 允许敲代码的记录关于此模块的信息(干哈用啊, 有啥函数啊, 怎么想的啊)。

@doc 允许敲代码的记录关于此函数的信息。(干哈用啊, 怎么想的啊)

拥有相关字段的库可以在 iex 中,用 “h 模块名”/“h 模块名.函数名”的形式进行查阅。

(所以遇到不知道的函数,先iex里h一下,能解决大部分问题。)

3. 特化函数输入输出的类型。

defmodule Circle do@spec area(number) :: numberdef area(r), do: r*r*pi
end

在没有@spec字段的时候, area函数可以接收一切值(然后报错)。@spec可以特化函数的输入输出的类型。其中一个好处是可以使其的错误由一开始的你不知道输入啥类型的报错变成输入不符合类型的报错。(犯错的一小步,加班的一大步)

五. 类型系统

1. Numbers

字面意思,int 和float 结合体。

4/2 == 2.0 #True
div(3,2) == 1 #True
rem(3,2) == 1 #True
1_000_000 == 1000000 #True

莫名奇妙的“/"符号,给的是浮点数。div, rem 就不多说了, 懂的都懂。

1_000_000,莫名其妙的语法糖,允许你数字像英文的数字写法那样1,000,000。

Extra(待详细补充!!!!!!)

这玩意儿有个很邪门的特性,就是整数大小是没有上限的,你写99位9的整数也是完全ok的。真的很邪门,需要参考erlang的相关内存分配规则。

另外,浮点要么是32bits,要么是64bits, 底层表示为IEEE 754-1985格式(我也不知道是啥,待查阅)

2. Atoms

没啥好说。

还是说说吧。

这玩意儿和上文提到的alias有关。

AnAtom == :"Elixir.AnAtom" #true

定义Atoms时,除了常规的冒号:加任意数字字母和下划线以外,还有种写法是:"atoms",这种写法允许写所有字符(吧)。

在代码块里,我们可以看到左边的字符是没有冒号在前面的,但是根据右边的字符,我们可以判断出,AnAtom是一个Atom。

换句话来说,Atoms还有一种写法是直接开头大写字母,这被称为alias。

那么这里面有什么乾坤呢?

AnAtom == Elixir.AnAtom #true
Elixir.AnAtom == :"Elixir.AnAtom" #true
alias IO, as MyIO

当你写下一个alias,等价于你告诉你编译器, 在编译的时候请把这个Atom变成前面加Elixir.的一个完整的Atom。

当你使用alias 模块名,as 你喜欢的名字的时候,等价于你告诉编译器,在编译的时候把你喜欢的名字替换为Elixir.模块名的Atom。

没错,模块名和函数名也是Atoms!

:true == true #true
:false == false #true

更离谱的事儿来了,Elixir里,布尔型居然他妈的也是Atoms。

高,实在是高。

所以Atom怎么实现的?(好像底层还是个整数?)

Extra

另外提一句,在Elixir里经常会看到一些函数后面带个问号的。不要以为这是什么奇怪的语法,这是因为Elixir允许函数名加问号的而已,没啥好奇怪的。不过,一般而言,这类带问号的函数返回的值均为布尔型,所以经常看到以下代码

database_value = connection_established? && read_data

自己领会啥意思。(提示:或并运算不会直接计算所有值哦,而是一个一个算的)

(再给个提示吧,或并运算并不是返回布尔型,而是返回一个表达式,当没有合法表达式时候,返回最后一个值)

(待续)


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

《Elixir In Action》第一章--第五章笔记相关推荐

  1. Java 北大青鸟 第一学期 第五章 循环结构(一) 上级练习+课后作业

    第一学期 第五章 循环结构(一) 实例1 打印50分试卷 实例5 如何进行程序调试 Java MyShopping管理系统 > 购物结算+管理系统 本章作业 源码下载 实例1 int i = 1 ...

  2. 【Java编程思想】读书笔记(一)第一章---第五章

    Java编程思想(第四版)学习笔记 第一章---第五章 第一章:对象导论 1.1抽象过程 1. 2访问控制 第二章:一切都是对象 2. 1用引用操纵对象 2. 2基本类型 第三章:操作符 3.7.1测 ...

  3. 计算机多媒体技术第五章,第五章多媒体技术的发展与应用

    <第五章多媒体技术的发展与应用>由会员分享,可在线阅读,更多相关<第五章多媒体技术的发展与应用(15页珍藏版)>请在人人文库网上搜索. 1.第五章 多媒体信息加工 一.多媒体技 ...

  4. linux man手册_读书笔记:Linux命令行与shell脚本编程大全 第一章~第五章

    第一章 初识Linux shell 1.系统内存管理 在Linux中使用的是请求分页的管理方式. 2.软件程序管理 Linux内核创建了第一个进程(init进程)来启动系统上所有其他进程. 3.硬件设 ...

  5. springcloud alibaba - (第一章~第五章)

    第一章 微服务介绍 1.1 系统架构演变 随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化. 从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构-&g ...

  6. 第一百一十五章 卓越之剑

    [霜霖剑](紫霖器・卓越) 攻击:720-950 力量:+37 体力:+35 附加:提升使用者7%的攻击力 特效:拥有3%的几率造成卓越一击伤害 介绍:上古时代神界有一霜霖之地,传说诸神修炼至化境时都 ...

  7. 总结:第一章~第五章

    1. java语言概述 2. 基本语法 3. 面向对象(一) 4. 面向对象(二) 5. 面向对象(三) 面向对象的三条主线: 1.类及类的成分 2.面向对象的三大特性 3.其他的关键字:this s ...

  8. 思科计算机网络第五章考试,思科第一学期第五章试题和答案

    1.IPv4 地址有多少位? 8 位 16 位 aaa32 位 64 位 128 位 2.请参见图示.工作站中的一个用户无法连接服务器.所有电缆经测试正常,而且所有设备都配置有 IP 地址.但该用户无 ...

  9. 前端学习第一阶段——第五章 CSS(上)

    5-1 CSS基本选择器 01-CSS层叠样式表导读 02-CSS简介 03-体验CSS语法规范 04-CSS代码风格 05-CSS选择器的作用 06-标签选择器 07-类选择器 08-使用类选择器画 ...

最新文章

  1. Codeforces 32E Hide-and-Seek 乞讨2关于镜面反射点 计算几何
  2. Css2.0+Css3.0+jQuery手册 chm
  3. 云应用基础技术成熟需七年时间
  4. 【STM32】HAL库 STM32CubeMX教程十一---DMA (串口DMA发送接收)
  5. Boostrap日期时间选择器
  6. Openstack M版快速配置(二)--刷数据库
  7. 暴风一号病毒(1kb病毒),U盘只剩快捷方式,文件消失
  8. 模拟电路47(有源滤波器2-二阶低通滤波器)
  9. python 时间曲线相似度计算_时间序列相似性度量综述
  10. 快商通智能客服云平台、金融反欺诈方案获中科院互联网周刊金i奖
  11. 2017年个人看书学习计划
  12. [TensorFlow深度学习深入]实战一·使用embedding_lookup模块对Word2Vec训练保存与简单使用
  13. mac屏保怎么不显示,mac屏保怎么关闭
  14. 用计算机亩换算成平方,平方换算亩计算器(农村土地面积计算公式)
  15. win7防火墙端口开放
  16. 服务器系统升级文件转移,多可系统迁移说明
  17. 如何续费iOS开发者账号 - 详细步骤
  18. Unity鼠标图标更换/点击图标更换
  19. OPENGL颜色混合
  20. 千年服务器经验怎么修改,千年服务端加入江湖等级的脚本

热门文章

  1. ABP 详解系列9:基于ABP框架实现RBAC(角色访问控制)
  2. Android存储数据---内容提供者ContentProvider
  3. 计算机二级需要掌握的英语词汇,二级英语必背单词
  4. 学生信息管理系统(数据库设计)
  5. 松弛(SOR)迭代法
  6. 【Java进阶营】月薪10000+,一天的工作量只改5行代码,我也要当程序员
  7. 【AI论文精粹】图形化解释工具;神经网络数据质量;LiDAR 语义分割;机器学习的应用
  8. 【人工智能大作业】A*和IDA*搜索算法解决十五数码(15-puzzle)问题 (Python实现)(启发式搜索)
  9. 【缺氧本体】火箭发射自动化模块
  10. Latex编译报错 “Undefined control sequence. \chapter“