繁体   English   中英

在Elixir映射中=>和:有什么区别?

[英]What is the difference between => and : in an Elixir map?

在Phoenix框架中

def show(conn, %{"id" => id}) do
  json conn, Repo.get(User, id)
end

可以很好地匹配,但是使用:表示法不会模式匹配

def show(conn, %{"id": id}) do
  json conn, Repo.get(User, id)
end

当我从测试中调用以下代码时

conn
|> get(user_path(conn, :show, user.id))
|> json_response(200)

%{key: value}Atom键而不是String键的简写。 让我们澄清一些事情:

:"a" == "a"
# => false

:"a" == :a
# => true

%{:a => 1} == %{"a": 1}
# => true

因此,当您编写%{"id": id} ,它的意思是: %{id: id} 不是 %{"id" => id} ,并且由于您的params映射没有:id键,所以它确实不匹配。


作为附带说明,我实际上编写了一个插件,以在Phoenix控制器中使用原子键来使参数匹配的内容简短而优美。

当您使用时:键是一个原子。 当您使用=> ,键实际上就是类型。 %{key: val}实际上只是%{:key => val}糖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM