Thrift/Erlang 字符串

发布于 2024-08-02 12:56:34 字数 558 浏览 6 评论 0原文

我正在尝试在 Erlang 中编写一个简单的 Thrift 服务器,它接受一个字符串并返回一个字符串。

一切似乎都在调用我的函数:

handle_function(Function, Args) when is_atom(Function), is_tuple(Args) ->
case apply(?MODULE, Function, tuple_to_list(Args)) of
    ok -> ok;
    Reply -> {reply, Reply}
end.

test([X]) ->
"You sent: " ++ X.

我得到了一个 function_clause。堆栈跟踪显示以下内容:

{function_clause,[{服务器,测试, [<<“w00t”>>]},
{服务器,handle_function,2},...

我的handle_function是从教程文件复制的,所以如果我需要调整它,我不会感到惊讶。有什么想法吗?

I'm trying to write a simple Thrift server in Erlang that takes a string and returns a string.

Everything seems to be working up to the point of calling my function:

handle_function(Function, Args) when is_atom(Function), is_tuple(Args) ->
case apply(?MODULE, Function, tuple_to_list(Args)) of
    ok -> ok;
    Reply -> {reply, Reply}
end.

test([X]) ->
"You sent: " ++ X.

I'm getting a function_clause. The stack trace shows the following:

{function_clause, [{server, test,
[<<"w00t">>]},
{server,handle_function, 2}, ...

My handle_function is copied from the tutorial file so I won't be surprised if I need to tweak it. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

拔了角的鹿 2024-08-09 12:56:34

apply 的最后一个参数应该是“test”的参数列表,例如,如果 tuple_to_list(Args) 导致:

[1]

...then:

test(1)

如果 tuple_to_list(Args) 导致:

[1,2]

...then :

test(1,2)

所以,如果 {<<"woot">>} 被传递给 tuple_to_list,那就是:

[<<"woot">>]

...所以:

test(<<"woot">>)

...但测试的签名要求一个列表作为参数,所以存在不匹配。

That last argument of apply should be a list of arguments to 'test', e.g., if tuple_to_list(Args) resulted in:

[1]

...then:

test(1)

If tuple_to_list(Args) resulted in:

[1,2]

...then:

test(1,2)

So, if {<<"woot">>} is being passed to tuple_to_list, that's going to be:

[<<"woot">>]

...so:

test(<<"woot">>)

...but test's signature asks for a list as the argument, so there's a mismatch.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文