You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang代码调用re:split报bad argument错误,求build_keyword_set正确入参

Erlang re:split/3 抛bad argument异常问题解决

核心错误原因

  • re:split入参非法:代码中直接将re:compile("\\s+", [unicode])的返回值传给re:split作为第二个参数,而re:compile成功时返回的是{ok, 正则实例}格式的元组,不是re:split要求的正则字符串/编译好的正则实例,直接触发bad argument异常。
  • 测试入参类型不匹配:你示例中用的["8"]是字符串列表(元素本质是整数列表),不符合build_keyword_set要求的list(binary())入参规范,Erlang中binary类型需要写成<<"8">>格式。
  • 函数spec定义错误:两个函数的返回值声明为list(string()),但实际返回的是gb_sets集合类型,会导致静态检查报错。

正确入参说明

build_keyword_set的正确入参为元素为binary类型的列表,示例:[<<"hello world">>, <<"erlang test">>]

修改后可运行代码

-module(keywords).
-export([start/0]).

start() ->
    BinList = [<<"8">>],
    Keywords = build_keyword_set(BinList),
    io:fwrite(" Keywords = ~p~n", [Keywords]).

-spec build_keyword_set(list(binary())) -> gb_sets:set(binary()).
build_keyword_set([Query|Rest]) ->
    gb_sets:union(do_build_keyword_set(Query), build_keyword_set(Rest));
build_keyword_set([]) ->
    gb_sets:new().

-spec do_build_keyword_set(binary() | undefined) -> gb_sets:set(binary()).
do_build_keyword_set(undefined) ->
    gb_sets:new();
do_build_keyword_set(Query) ->
    {ok, Mp} = re:compile("\\s+", [unicode]),
    gb_sets:from_list(re:split(Query, Mp, [{return, binary}])).

运行结果

运行后输出: Keywords = {set,1,16,16,8,80,48,{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},{{[<<"8">>],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]}}},即成功生成包含拆分后binary的gb_set。

内容的提问来源于stack exchange,提问作者Raja Rokkam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:24:00