elixir - 21 agent

栏目: 编程语言 · 发布时间: 6年前

内容简介:参考: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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序开发心理学

程序开发心理学

(美)杰拉尔德·温伯格 / 邓俊辉 / 清华大学出版社 / 2004-1-1 / 39.00元

本书开创"以人为本"研究方法的先驱,在长达25年的岁月中一直保持活力,至今仍在继续。1997年,本书作者温伯格因其在软件领域的杰出贡献,被美国计算机博物馆的计算机名人堂选为首批5位成员之一。 在计算机界,还没有任何一本计算机方面的书,在初次出版之后,能够在长达25年的岁月中一直保持活力--而且这种活力到今天仍在继续。《程序开发心理学》是开创"以人为本"研究方法的先驱,它以其对程序员们在智力、......一起来看看 《程序开发心理学》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试