在元组中带有搜索文本条件的 if 语句

if statement with a search text condition in a tuple

我需要在 erlang 中编写一个 if 语句,条件是在我收到的元组中搜索此测试 "tele/folin-house-s1/SENSOR"。 下面我插入我收到的元组:

{message,<<0,5,128,208,182,250,162,9,244,64,0,0,105,198,0,0>>,
     1,<<"DVES_0DBFDB">>,
     #{dup => false,retain => true},
     #{username => undefined},
     <<"tele/folin-house-s1/LWT">>,<<"Offline">>,
     {1549,8794,985040}}.
{message,<<0,5,128,208,182,250,162,9,244,64,0,0,105,198,0,0>>,
     1,<<"DVES_0DBFDB">>,
     #{dup => false,retain => true},
     #{username => undefined},
     <<"tele/folin-house-s1/LWT">>,<<"Offline">>,
     {1549,8794,985040}}.
{message,undefined,0,<<"733f0bfd-0741-4e55-bd14-ba10a156165f1549007325254">>,
     #{dup => false,retain => false},
     #{username => undefined},
     <<"tele/folin-house-s1/SENSOR">>,
     <<"{\"Time\":\"2018-12-18T22:37:00\",\"BME680\":{\"Temperature\":21.3,\"Humidity\":38.1,\"Pressure\":1021.4,\"Gas\":308.19},\"TempUnit\":\"C\"}">>,
     {1549,8796,895335}}.
{message,undefined,0,<<"733f0bfd-0741-4e55-bd14-ba10a156165f1549007325254">>,
     #{dup => false,retain => false},
     #{username => undefined},
     <<"tele/folin-house-s1/SENSOR">>,
     <<"{\"Time\":\"2018-12-18T22:37:00\",\"BME680\":{\"Temperature\":21.3,\"Humidity\":38.1,\"Pressure\":1021.4,\"Gas\":308.19},\"TempUnit\":\"C\"}">>,
     {1549,8803,302986}}.

我想用 if 语句过滤像这样的元组:

{message,undefined,0,<<"733f0bfd-0741-4e55-bd14-ba10a156165f1549007325254">>,
     #{dup => false,retain => false},
     #{username => undefined},
     <<"tele/folin-house-s1/SENSOR">>,
     <<"{\"Time\":\"2018-12-18T22:37:00\",\"BME680\":{\"Temperature\":21.3,\"Humidity\":38.1,\"Pressure\":1021.4,\"Gas\":308.19},\"TempUnit\":\"C\"}">>,
     {1549,8803,302986}}. 

包含 "tele/folin-house-s1/SENSOR"。我不懂erlang编码。

使用 case 子句可能会更好

在这种情况下,您需要通过函数传递接收到的元组

这里是函数示例:

message({message,_, _,_, _, _, <<"tele/folin-house-s1/LWT">>,_, _}) ->
  do_something();
message(_Tuple) -> skip.

这里是带有 'case' 语句的示例:

message({message,_, _,_, _, _, Condition,_, _}) ->
  case Condition of
    <<"tele/folin-house-s1/LWT">> -> do_something();
    _Any -> skip
  end.

这里是带有 'if' 语句的示例:

message({message,_, _,_, _, _, Condition,_, _}) ->
  if
    Condition =:= <<"tele/folin-house-s1/LWT">> ->
      do_something();
    true ->
      skip
  end.