elixir - Access.get/3 中没有匹配的函数子句
问题描述
在空闲时间我正在学习 elixir,现在我正在尝试开发简单的 Elixir API。一切正常,除了当我尝试使用 Postman/curl 插入新值时。当我尝试使用此类数据时:
{
"tree": "nil",
"value": "5"
}
我得到这个错误:(FunctionClauseError) no function clause matching in Access.get/3
。
这是我的端点中的 POST 代码。
post "/insert" do
IO.inspect(conn.body_params)
{status, body} =
case conn.body_params do
%{"tree" => tree, "value" => value} -> {200, process_insert(tree, value)}
BstInsertion.insert(tree, value)
_ -> {400, missing_insert()}
end
send_resp(conn, status, body)
end
插入函数和 process_insert 的示例:
def insert(nil, value) do
%{value: value, ltree: nil, rtree: nil}
end
defp process_insert(_tree, _value) do
Poison.encode!(%{response: "Received insert!"})
end
如果这还不够,我将提供更多代码。感谢您的任何建议和帮助。
解决方案
我认为你的代码有问题。我已经整理了你的代码:
post "/insert" do
IO.inspect(conn.body_params)
{status, body} =
case conn.body_params do
%{"tree" => tree, "value" => value} ->
{200, process_insert(tree, value)}
BstInsertion.insert(tree, value) # What is this line? What is the output?
_ ->
{400, missing_insert()}
end
send_resp(conn, status, body)
end
每个子句/函数的最后一行是返回值。所以你的第一个case
子句返回BstInsertion.insert(tree, value)
. 这是你所期望的吗?从上一行来看,我可以说不是。
推荐阅读
- sql-server - 在 SQL 中将长字符串转换为 ASCII
- dll - 我收到一条错误消息,提示使用 Visual Studio 2017 重建 Pocketsphinx 时未找到 .dll
- intellij-idea - 自动导入不使用关键字import,而是粘贴全限定路径
- wordpress - 在 woocommerce 上更新订单状态时在 FB Messenger 上发送消息
- c# - Ajax 发布仅返回多个选择框的第一个值
- r - 如何对值大于的数据框进行排序
- categories - 如何访问此数组中的类别以显示在我的自定义页面上
- php - CSRF:我需要对没有 cookie 的网站使用 CSRF 令牌吗?
- go - 单个函数中的多个参数类型
- python - Python/Flask:将消息和状态码返回给调用函数?