小编Ala*_*ore的帖子

Erlang风格 - 案例与功能模式匹配

我已经到了现在我写了很多Erlang代码的阶段,我可以看到一些风格(坏或好)悄悄进入我写作的方式.这个特别的习惯我想要一些意见 - 将案例样式语句转换为函数模式匹配更好(更可读/更快/更好)?

例如

比较(一个人为的例子)

case {Size > 100000, Type} of
    {true, ets } ->
         %% Do something to convert to dets
         something;
    {false, dets} ->
         %% do something to convert to ets
         somethingelse;
    _ ->
         ignoreit
end;
Run Code Online (Sandbox Code Playgroud)

...
maybeChangeStorage(Size, Type)
...

maybeChangeStorage(Size, ets) when Size > 10000 ->
   something;
maybeChangeStorage(Size, dets) when Size < 10000 ->
   somethingelse;
maybeChangeStorage(_,_) ->
   ignoreit.
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,我更喜欢后者,但我对其他观点感兴趣.

erlang coding-style

19
推荐指数
2
解决办法
1万
查看次数

如何监视已关闭并正在重新启动的远程erlang节点

我的应用程序在erlang集群中运行 - 通常有两个或更多节点.节点之间有活跃的监控(使用erlang:monitor_node)工作正常 - 我可以检测并响应已启动的节点现在已关闭的事实.

但是,我如何才能发现该节点已重新启动并重新开始运营?我当然可以定期ping节点直到它重新启动,但有没有更好的方法让我错过了?流程组是实现这一目标的更好方法吗?

(已编辑添加)

我认为执行像选举主管这样的技术的答案是我缺少的思考过程.我会调查并将此问题标记为已完成....

erlang

6
推荐指数
1
解决办法
2757
查看次数

位设置和代码可读性

我有一个Arduino应用程序(实际上是一个库),其中包含许多状态标志 - 最初我只是将它们声明为int(在这种情况下,uint8_t为8位无符号字符).但我可以将它们全部合并为一个整数,并使用位掩码操作来设置和测试状态.

前者的一个例子:

if (_shift == HIGH)
{
    _shift = LOW;
}
else
{
    _shift = HIGH;
}
Run Code Online (Sandbox Code Playgroud)

后者的一个例子

#define SHIFT_BIT 0

if (bitRead(_flags, SHIFT_BIT) == HIGH)
{
   bitWrite(_flags, SHIFT_BIT, LOW);
}
else
{
   bitWrite(_flags, SHIFT_BIT, HIGH);
}
Run Code Online (Sandbox Code Playgroud)

前者读得更好,但后者更有效(空间和时间).在这种情况下,空间和时间效率是否总能获胜?或者这是一种只在需要时才会发生的优化?

(添加)

为了完整性,这里是bitWrite等宏的接线定义:

#define bitRead(value, bit) (((value) >> (bit)) & 0x01)
#define bitSet(value, bit) ((value) |= (1UL << (bit)))
#define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
Run Code Online (Sandbox Code Playgroud)

c++ embedded performance arduino

4
推荐指数
2
解决办法
3292
查看次数

标签 统计

erlang ×2

arduino ×1

c++ ×1

coding-style ×1

embedded ×1

performance ×1