gpt4 book ai didi

erlang - 为什么这个带有类型签名的 erlang prog 可以编译?

转载 作者:行者123 更新时间:2023-12-04 16:22:52 25 4
gpt4 key购买 nike

我有这个程序:

-module(a).
-export([add/2]).
-export([add2/1]).

-spec add(integer(),integer())->integer().
add(A,B)->A+B.

add2(C)->C+add(1,"a").

我可以毫无错误地编译这个 prog。但我认为我应该得到该行的错误

add(1,"a").

在任何静态类型语言中,它都无法编译,那么为什么erlang会编译呢?如何
编写类型签名以便 erlang 可以捕获此错误?如果 erlang 不能,elixir 可以编写相同的 prog 但可以捕获此错误吗?谢谢!

最佳答案

Erlang 不是静态类型语言,它是总是动态类型的。在编译过程中你无法捕捉到它,因为 erlc 根本不关心 -spec。它仅用于文档,Dialyzer(从技术上讲是外部工具)可以使用它对合约进行一些(有限的)静态分析。

关于如何使用 Dialyzer,请查看:

关于erlang - 为什么这个带有类型签名的 erlang prog 可以编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70107957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com