gpt4 book ai didi

Erlang badarith 关于 IO 输入

转载 作者:行者123 更新时间:2023-12-02 11:34:31 28 4
gpt4 key购买 nike

我正在学习 Erlang,并且我正在尝试使用来自 stdio 输入的一些输入将消息从一个进程传递到另一个进程。

这是我的代码(我知道我可以使用普通函数,但这不是主题)。

-module(play).

-compile(export_all).

calculateArea() ->
receive
{rectangle, W, H,SenderPID} -> SenderPID ! {area,W * H};
{circle, R,SenderPID} -> SenderPID ! {area,3.14 * R * R};
_ -> io:format("We can only calculate area of rectangles or circles.")
end,
calculateArea().

doStuff() ->
CalculateArea = spawn(play,calculateArea,[]),
{ok,Width} = io:fread("Enter width","~d"),
{ok,Height} = io:fread("Enter height","~d"),
CalculateArea ! {rectangle,Width,Height,self()},
receive
{area,Size} -> io:write(Size)
end,
io:fwrite("done").

当我运行 play:doStuff(). 时,我得到一个 {badarith,[{play,calculateArea,0,[{file,"play.erl"},{line, 10}]}]} 错误。

我不明白为什么,根据文档,“~d”会给我一个十进制值,如果我打印它,它看起来肯定是这样的。

这里有什么问题吗?

最佳答案

io:fread 返回

Result = {ok, Terms :: [term()]}
| {error, {fread, FreadError :: io_lib:fread_error()}}
| server_no_data()

因此,WidthHeight 将是各自包含单个数字的列表。使用 {ok, [Width/Height]} = ... 修复。

关于Erlang badarith 关于 IO 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33108608/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com