[英]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.