ARTS 是 左耳朵耗子 提出来的一个打卡任务。每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西!我希望这个事可以给大家得到相应的算法、代码、技术和影响力的训练。
这是我的第七周打卡。这周在做文档的在线预览功能时用到了微软的 Office API,需要它能够访问到文件的地址,所以得在公网上才能使用这个功能。在本地调试的时候,就不太方便了。所以想到了使用 ngrok 来做一个内网穿透,并把它添加到操作系统的守护进程中,就可以一直使用了。
🤖 Algorithm
📖 Review
A Collection of Tips for Elixir’s Interactive Shell (IEx)
这篇文章讲的是关于 Elixir
里的 Iex
的一些小技巧。在日常使用中,掌握这些小技巧往往能让我们事半功倍。
目前接触比较多的有以下几个Tips:
-
获取帮助
Elixir 在 iex 中内置了语言的帮助文档,这种做法十分棒。开发者不用跳到外部去翻阅各种资料,直接敲一个命令就可以查看语法了。比如:
h Enum
就可以显示Enum
模块的语法。 -
重新编译项目或模块
# 重新编译整个项目 iex> recompile # 编译具体的模块 iex> r MinitwitterWeb.PostController
-
.iex.exs 文件
在项目中新建一个
.iex.exs
文件,里面可以写一些alias
、import
语句,在iex
中就可以直接使用了alias Minitwitter.Accounts.User alias Minitwitter.Accounts.Relationship iex> Relationship Minitwitter.Accounts.Relationship
-
在 iex 中加载 module 或 script
使用
c/1
命令可以在iex
中编译文件iex> c "lib/issues.ex" iex> c "./elixir_book.exs"
-
多行写法
在命令行中,通常写一行再按
Enter
键就会直接执行了,对于多行的写法我们可以借助括号来实现iex(16)> ([1, [2], 3] <-- Works fine when surrounded by parenthesis ...(16)> |> List.flatten() ...(16)> ) [1, 2, 3]
另外有一些之前没有接触过的,但感觉使用也蛮频繁的:
-
列出模块中所有的宏和函数
使用
exports
或者module_info
iex> exports Minitwitter.Accounts iex> Minitwitter.Accounts.module_info
-
列出模块中所有的类型
iex(4)> t Enum <-- Lists all types in Enum module @type acc() :: any() @type default() :: any() @type element() :: any() @type index() :: integer() @type t() :: Enumerable.t()
-
获取历史命令的值
如果上一个命令的结果没有赋值给一个变量,那么我们想获取它就比较麻烦了。
iex
提供了v
,我们可以使用它来获取历史命令的值。iex(5)> Enum.reverse([1, 2, 3]) [3, 2, 1] iex(6)> reversed = v(5) [3, 2, 1] iex(7)> reversed [3, 2, 1]
💡 Tip
正则表达式在开发中偶尔会用到,所以平时这方面的知识比较欠缺。每次想写一个正则匹配,都是各种查资料,这次干脆花点时间重新学习了一下,主要是位置的匹配。
💎 Share
分享文章:使用 supervisor 配置 ngrok 内网穿透为守护进程
这周做了一个使用 Office 在线预览文档的功能,需要 Office 的在线预览 API 能够访问到文件的地址。在本地调试的时候,可以使用 ngrok
来做一个内网穿透,就不用上到公网上去测试了。