2

在 Erlang 代码中,我使用了一个类似字典的数据结构,它有一个 {tag, value} 列表。例如:{robot, [{x-pos, 50}, {y-pos, 100}, {speed, 10}]。列表中的元素数量或其顺序无法预测。我编写了将遍历列表以查找每个参数的值的函数,例如 get_xpos、get_ypos 等。

我想写一个应该像这样的函数

function(MyTuple) when get_xpos (MyTuple) > 50 -> stop;
function(MyTuple) when get_ypos (MyTuple) < 50 -> forward.

由于守卫或 Erlang 中不允许用户定义的函数,因此这是不可能的。由于有很多这样的条件,为每个条件编写 case 语句并不优雅。有没有更好的方法来做到这一点?

4

1 回答 1

1

你可以这样做:

aux_fun(TupleList) -> fun(get_xpos(TupleList), get_ypos(TupleList)).

fun(XPos, YPos) when XPos > 50 -> stop;
fun(XPos, YPos) when YPos < 50 -> forward.
于 2013-02-22T11:44:23.537 回答