REPL
了解 Elm 的一个好方法是尝试在 REPL(Read-Eval-Print Loop)中编写一些表达式。在 elm-app
文件夹中打开一个控制台(你已在初始化和构建阶段创建 )并尝试以下操作:
$ elm repl
---- elm-repl 0.17.1 -----------------------------------------------------------
:help for help, :exit to exit, more at <https://github.com/elm-lang/elm-repl>> 2 + 2
4 : number
> \x -> x
<function> : a -> a
> (\x -> x + x)
<function> : number -> number
> (\x -> x + x) 2
4 : number
>
elm-repl
实际上是一个非常强大的工具。假设你使用以下代码在 elm-app
文件夹中创建 Test.elm
文件:
module Test exposing (..)
a = 1
b = "Hello"
现在,你回到你的 REPL(已经打开)并输入:
import Test exposing (..)
> a
1 : number
> b
"Hello" : String
>
更令人印象深刻的是,如果你为 Test.elm
文件添加新定义,例如
s = """
Hello,
Goodbye.
"""
保存文件,再次返回 REPL,无需再次导入 Test
,新的定义立即可用:
> s
"\nHello,\nGoodbye.\n" : String
>
当你想要编写跨越多行的表达式时,这非常方便。快速测试刚刚定义的函数也非常有用。将以下内容添加到你的文件中:
f x =
x + x * x
保存并返回 REPL:
> f
<function> : number -> number
> f 2
6 : number
> f 4
20 : number
>
每次修改并保存已导入的文件,然后返回 REPL 并尝试执行任何操作时,将重新编译完整文件。因此,它会告诉你代码中的任何错误。添加这个:
c = 2 ++ 2
试试看:
> 0
-- TYPE MISMATCH -------------------------------------------------- ././Test.elm
The left argument of (++) is causing a type mismatch.
22| 2 ++ 2
^
(++) is expecting the left argument to be a:
appendable
But the left argument is:
number
Hint: Only strings, text, and lists are appendable.
>
总结一下 REPL 的这个介绍,让我们补充一点,elm-repl
也知道你用 elm package install
安装的软件包。例如:
> import Html.App
> Html.App.beginnerProgram
<function>
: { model : a, update : b -> a -> a, view : a -> Html.Html b }
-> Platform.Program Basics.Never
>