Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions 11-process.md
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ end

执行一下```iex kv.exs```:
```elixir
iex> {:ok, pid} = KV.start
iex> {:ok, pid} = KV.start_link
#PID<0.62.0>
iex> send pid, {:get, :hello, self()}
{:get, :hello, #PID<0.41.0>}
Expand Down Expand Up @@ -272,7 +272,7 @@ iex> Agent.get(pid, fn map -> Map.get(map, :hello) end)
:world
```

给```Agent.start/2```方法加上```:name```选项,可以自动为其注册一个名字。
给```Agent.start_link/2```方法加上```:name```选项,可以自动为其注册一个名字。

除了agents,Elixir还提供了一套API来创建通用服务器(generic servers,称作GenServer),任务等。
这些都是建立在进程概念之上的实现。其它概念,包括“管理者”树,都可以在《高级》篇里找到更详细的说明。
Expand Down
2 changes: 1 addition & 1 deletion 14-mod-attr.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ Plug.Adapters.Cowboy.http MyPlug, []
上面例子中,我们用了`plug/1`宏来连接处理请求时会被调用的函数。
在代码背后,每次调用宏`plug/1`时,Plug库把提供的参数(即plug的名字)存储在`@plugs`属性里。
就在模块被编译之前,Plug会执行一个回调函数,该回调函数定义一个函数(`call/2`)来处理http请求。
这个函数将按顺序执行所有保存在`@plug`属性里的plugs。
这个函数将按顺序执行所有保存在`@plugs`属性里的plugs。

要理解底层的代码,我们还需要了解宏,因此我们将在后期《元编程》章节中回顾这个模式。
这里的重点是怎样使用属性来存储数据,让开发者可以创建DSL(领域特定语言)。
Expand Down
2 changes: 1 addition & 1 deletion 15-structs.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ iex> defmodule User do
```

`defstruct/1`的参数(一个键值列表)定义了结构体的字段和默认值。结构体使用了定义它的模块的名字。
向上面这个例子,我们定义的结构体叫做`User`。
像上面这个例子,我们定义的结构体叫做`User`。

现在可以用类似创建图的语法来创建结构体`User`:

Expand Down