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

Erlang中如何正确定义函数类型,为-spec的ReplaceFun参数补充详细描述

正确的函数类型定义方案

错误原因说明

你之前的写法误用了参数化类型的语法定义函数类型,不符合Erlang类型系统规则,所以触发bad type variable报错。
Erlang中定义带参数的函数类型需使用fun((参数类型1, 参数类型2) -> 返回值类型)的语法规则。

方案1:单独定义自定义函数类型

首先定义独立的replace_fun类型:

-type replace_fun() :: fun((string(), [string()]) -> {string(), non_neg_integer()}).

之后直接在函数spec中引用该类型即可:

-spec match_evaluator(ReplaceFun, Text, Regex) -> Result
   when ReplaceFun :: replace_fun(),
        Text :: string(),
        Regex :: string(),
        Result :: string().

方案2:直接在spec中声明函数类型(无需单独定义类型)

如果不需要复用该函数类型,可以直接把类型写在spec里:

-spec match_evaluator(ReplaceFun, Text, Regex) -> Result
   when ReplaceFun :: fun((string(), [string()]) -> {string(), non_neg_integer()}),
        Text :: string(),
        Regex :: string(),
        Result :: string().

内容的提问来源于stack exchange,提问作者Anatolii Kosorukov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:51:03