我正在尝试编译以下erlang代码:
my_time_func(F) ->
{Mega, Mini, Micro} = now(),
F,
{SMega,SMini,SMicro} = now(),
{FMega,FMini,FMicro} = {SMega - Mega, SMini - Mini, SMicro - Micro},
if
FMicro < 0 -> %guard 1
if
FMini - 1 < 0 -> {FMega - 1, FMini, FMicro + (FMicro * 2) + 1};
true > 0 -> {FMega, FMini - 1, FMicro + (FMicro * 2) + 1};
end;
true -> %guard 2
if
FMini < 0 -> {FMega - 1, FMini + (FMini * 2) + 1, FMicro} ;
true > 0 -> {FMega,FMini,FMicro} ;
end;
end.
但是它说我在第19行(这是第一个结束)之前有语法错误。我是否缺少某种分号?
最初,我打算将其发布在代码审查中,因为此代码非常“丑陋”。有没有更好的办法来做这样的事情?(为函数计时),而无需使用内置函数,最好不单独使用erlang模块。
这是Erlangif
表达式
if
GuardSeq1 ->
Body1;
...;
GuardSeqN ->
BodyN
end
因此,您需要删除属于表达式;
之前的内容,固定版本如下;end
if
my_time_func(F) ->
{Mega, Mini, Micro} = now(),
F,
{SMega,SMini,SMicro} = now(),
{FMega,FMini,FMicro} = {SMega - Mega, SMini - Mini, SMicro - Micro},
if
FMicro < 0 -> %guard 1
if
FMini - 1 < 0 -> {FMega - 1, FMini, FMicro + (FMicro * 2) + 1};
true > 0 -> {FMega, FMini - 1, FMicro + (FMicro * 2) + 1}
end;
true -> %guard 2
if
FMini < 0 -> {FMega - 1, FMini + (FMini * 2) + 1, FMicro} ;
true > 0 -> {FMega,FMini,FMicro}
end
end.
关于问题的第二部分,timestamp
以微秒为单位取2 s的差值可能是另一种方式,例如:
now_diff({Meg2, Sec2, Mic2}, {Meg1, Sec1, Mic1}) ->
((Meg2 * 1000000 + Sec2) * 1000000 + Mic2) - ((Meg1 * 1000000 + Sec1) * 1000000 + Mic1).
my_time_func(F) ->
T1 = now(),
F(),
T2 = now(),
Diff = now_diff(T2, T1),
{Diff div 1000000000000, (Diff rem 1000000000000) div 1000000, Diff rem 1000000}.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句