在询问之前,我试着在谷歌上搜索来了解它,因为药剂没有被广泛使用,文章的数量也就少了。描述成功打字的文章给出了过于抽象的信息,使我难以理解。
有谁能帮助我用一个例子来详细地理解它吗?如果可能的话,请
发布于 2022-05-23 11:15:57
Dialyzer和Elixir对类型和规格的使用可能是语言中最令人困惑的事情之一。灵丹妙药是不寻常的,因为它是一种动态类型的编译语言(!!)。变量类型的“松散”是通过设计来实现的:具有灵活性有一件事可以帮助您进行热代码交换( Erlang就是为此设计的)。
对类型规格的支持是在事实之后添加的.这些声明是在功能代码之上的非必要的修饰--它们不需要存在,也不一定要完全准确,这让我们这些熟悉强类型语言的人感到困惑,因为在这些语言中,任何松散的解释都是不可容忍的。
Dialyzer提供了一种评估功能输入的正确性的方法--它可以帮助识别可能列出的规格不准确的地方。同样,这里令人困惑的是,这个过程并不像程序员所期望的那样严格:有时Dialyzer会抱怨一些工作正常的事情,有时它在遇到问题的地方没有看到任何错误(尽管仅在过去的一年中,它的准确性就有了很大的提高)。
为了理解这一点,我发现记住规范/注释的目的是有帮助的:它们有助于向人类传达函数接受和返回的内容(它为我认为次要的编译器提供了下游的好处)。所以请记住,如果你选择加入成功--在你的功能中输入,慢慢来,经常向Dialyzer检查--任何出现的错误都应该被看作是你所说的代码应该接收和返回的不一致,与Dialyzer看到代码实际所做的不同。如果你不定义任何规格,就没有异议。对代码进行梳理可以帮助您识别函数可能返回的所有可能值,Dialyzer是一个非常好的工具,可以帮助您验证您所说的函数所做的是它真正能够实现的功能。
https://stackoverflow.com/questions/72341381
复制相似问题