内容简介:参考: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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning ARKit for iPhone and iPad
Wallace Wang / Apress / 2018-11-5 / USD 39.99
Explore how to use ARKit to create iOS apps and learn the basics of augmented reality while diving into ARKit specific topics. This book reveals how augmented reality allows you to view the screen on ......一起来看看 《Beginning ARKit for iPhone and iPad》 这本书的介绍吧!