类型

Elm 的主要优点之一是用户实际上看不见运行时错误。这是可能的,因为 Elm 编译器可以非常快速地分析你的源代码以查看值如何流经你的程序。如果某个值可能以无效的方式使用,编译器将通过友好的错误消息告诉你。这称为类型推断。编译器会找出所有函数中的流入和流出值的类型

类型推断示例

以下代码定义了一个 toFullName 函数,该函数将一个人的全名作为字符串提取出来

toFullName person =
  person.firstName ++ " " ++ person.lastName

fullName =
  toFullName { fistName = "Hermann", lastName = "Hesse" }

就像在 JavaScript 或 Python 中一样,我们只需编写代码,而无需额外的干扰。但你看到 bug 了吗?

在 JavaScript 中,等效代码会吐出 "undefined Hesse"。甚至不会出现错误!希望你的某个用户在野外看到它时会告诉你。而 Elm 编译器只会查看源代码并告诉你

-- TYPE MISMATCH ---------------------------------------------------------------

The argument to function `toFullName` is causing a mismatch.

6│   toFullName { fistName = "Hermann", lastName = "Hesse" }
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Function `toFullName` is expecting the argument to be:

    { …, firstName : … }

But it is:

    { …, fistName : … }

Hint: I compared the record fields and found some potential typos.

    firstName <-> fistName

它会看到 toFullName 获取了错误类型的参数。正如错误消息中的提示所说,有人不小心写了 fist 而不是 first

对于这样简单的错误,有一个助手很有用,但当你拥有数百个文件和许多协作者进行更改时,它的价值会更高。无论事物变得多么庞大复杂,Elm 编译器都可以仅根据源代码检查所有内容是否正确地结合在一起。

你越了解类型,编译器就会感觉更像一个友好的助手。因此让我们开始学习更多内容吧!

匹配项 "" 的结果

    没有匹配"" 的结果