内容简介:参考:https://elixir-lang.org/getting-started/mix-otp/agent.htmlelixir 是一门 immutable 的语言, 如何在各个process之间共享数据就是问题。agent可以用来实现共享state
参考:https://elixir-lang.org/getting-started/mix-otp/agent.html
elixir 是一门 immutable 的语言, 如何在各个process之间共享数据就是问题。
agent可以用来实现共享state
iex> {:ok, agent} = Agent.start_link fn -> [] end
{:ok, #PID<0.57.0>}
iex> Agent.update(agent, fn list -> ["eggs" | list] end)
:ok
iex> Agent.get(agent, fn list -> list end)
["eggs"]
iex> Agent.stop(agent)
:ok
上面的代码,实现了使用Agent对 agent中的[]进行设置和修改。
创建一个新文件:
1. lib/kv/bucket.ex
defmodule KV.Bucket do
use Agent
def start_link(_opts) do
Agent.start_link(fn -> %{} end)
end
def get(bucket, key) do
Agent.get(bucket, &Map.get(&1, key))
end
# 这里的 &Map.put 。 就是capture
def put(bucket, key, value) do
Agent.update(bucket, &Map.put(&1, key, value))
end
end
2. test/kv/bucket_test.exs
defmodule KVTest do
use ExUnit.Case
doctest KV
test "greets the world" do
assert KV.hello() == :world
end
end
capture: 上面的
Agent.update(bucket, &Map.put(&1, key, value))
也可以写成:
Agent.update(bucket, fn(x) -> Map.get(x, key) end )
还可以在单元测试中使用 setup
defmodule KV.BucketTest do
use ExUnit.Case, async: true
setup do
# 这里的 my_name 已经成为了一个变量,下面这个 keyword list 是个返回值
%{my_name: "jim"}
end
test "stores values by key" do
{:ok, bucket} = KV.Bucket.start_link([])
assert KV.Bucket.get(bucket, "milk") == nil
KV.Bucket.put(bucket, "milk", 3)
assert KV.Bucket.get(bucket, "milk") == 3
end
# 下面, %{my_name: my_name} 中,先声明了变量my_name, 并且把setup中的最后一行,为my_name赋值 ,
# 这里严格的说,是把%{} 合并到 test..do 的 context中。
test "shows how to use setup ", %{my_name: my_name} do
IO.puts "my_name: #{my_name}"
assert my_name == "jim"
end
end
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Design Accessible Web Sites
Jeremy Sydik / Pragmatic Bookshelf / 2007-11-05 / USD 34.95
It's not a one-browser web anymore. You need to reach audiences that use cell phones, PDAs, game consoles, or other "alternative" browsers, as well as users with disabilities. Legal requirements for a......一起来看看 《Design Accessible Web Sites》 这本书的介绍吧!