Vico Bill< 刘 利 波 > 的个人网站

记录关于学习、工作中的技术点滴

C,C++,Rust,Ruby爱好者;热衷于游戏开发、任务自动化与跨平台;沉迷于游戏引擎与图形表现;深信'简单、多元'哲学的力量。


访问主页

笔记集锦-Elixir

核心:

匹配

=号是匹配.表示左边和右边互相匹配值.

<- 匹配,但匹配失败时,不会报错,而是返回nil值.

不可变

所有值,一旦创建就不可再改变.

基础

  • 整数: 任意大小的整数
  • 浮点数
  • 原子: 全局唯一名称

  • 区间Range: start..end
  • 正则表达式: 可用~r/../ 或其他~r{..} 等sigil包裹. 在Regex模块中.

  • PID和端口: 进程ID.端口表示可读写的资源引用.self表示自身进程.
  • 引用.全局唯一引用.

复合数据类型:

  • 元组: 用{}包围.值的集合.
  • 列表: 与lisp列表相同,用[...]包围
    • 关键字列表: 和映射相同,但写为由[]包裹.默认会转成 [{},{}]形式.
  • 映射: 如ruby的哈希表,由%{k => v, k => v}形式写成.键可是任何类型.
  • 二进制: 用<< ... >> 包裹的值列表

  • Date和Time:分别由~D[...]~T[...]表示.
    • NaiveDateTime: 纯由DateTime组成,由~N[...]表示

运算符

+, -, *, /,div,rem整除和取余.

and, &&, or, ||, not, !

===, ==, !==, !=, >, <, >=, <=

<> 二进制连结 ++,-- 列表连结和取不同

in 判断值是否在可枚举类型中

^ 针操作符:使用匹配的值.

作用域

基于语法的作用域.

with函数可自定局部变量

IEx

通过h IEx可查看其帮助文档.

当模块中的导出包含注解@doc false,@impl true时,iex不会自动完成.

–werl 可在windows启用自动完成

IEx会对自动判断表达式的边界,对表达式求值,如果表达式需要多行来表示,可使用()来包裹.

退出方式:

  • 通过BREAK菜单(Ctrl-C)按下q,回车
  • 按下Ctrl-C,Ctrl-C
  • 按下Ctrl-\

可使用pry给Elixir代码下断点.这颗让开发者在给定函数内执行IEx会话.

def my_fun(arg1, args) do

    require IEx; IEx.pry()
    ...
end 

IEx在启动时会加载.iex.exs文件.

函数

匿名函数

Phoenix Framework

  1. 获取Phoenix框架: mix archive.install hex phx_new mix是管理任务的工具,如果想查找相关任务帮助,可通过类似mix help --search "phx"找到.

  2. 创建新Phoenix项目. mix phx.new demo --live

  3. 获取项目的依赖项,以进行编译或运行 cd demo && mix deps.get

  4. 为网页资源获取依赖 cd asset && npm install && node node_modules/webpack/bin/webpack.js --mode development

  5. 配置项目数据库 mix ecto.create

  6. 启动Phoenix应用. mix phx.serveriex -S mix phx.server

    启动中,如果报错: `inotify-tools` is needed to run `file_system` ,可通过sudo apt install inotify-tools安装.

  7. 打开localhost:4000可查看结果.

最近的文章

笔记集锦——ChangeLog规范

前言作为一个普通的开发者,我必须为我的项目维护一个更新日志(以下简称 changelog)吗? 如果你在维护一个开源项目,或者公司内部的底层技术产品,那么提供一个 changelog 是必需的。开发者用户很可能需要从一个低版本升级到最新版,changelog 可以帮助他们了解新版本有哪些变化。 如果你在开发一个业务应用,那么 changelog 不是必需的。然而提供一个 changelog 会更好,因为其他协作者或是交接方能更直观地看到业务逻辑的演变。我记得你还约束了 Git log ...…

继续阅读
更早的文章

笔记集锦-Lisp

参考 各个Reliable UDP对比Reliable UDP一览:那些能替代TCP的RUDP方案背景:笔者负责的一个项目在实时性方面有着较高要求,低延时是一个技术指标,希望能够尽可能减少延迟,来优化服务体验。所以需要在UDP方面进行一些调研。而我们的数据协议是建立在可靠网络传输协议之上的,它的数据包之间有一些关联,不允许丢包。因而将TCP迁移到使用Reliable UDP可能是一个优化的方向。ps:本文系搬运、整理、部分翻译,再加上自己的一些理解,实验数据来源于网络。本文还处于调研阶段,...…

继续阅读