试图找出如何获取当前时间,我找到了方法,但不知道如何读取类型签名。
类型签名是 now : Task x Time
你可以在这里看到。
由于他们在所有地方使用x
作为变量名,因此无法确定如何搜索它,通常我可以在解析器代码中找到正确的位置,但很难跟踪它。
x
是所谓的类型参数
。这意味着该类型尚未定义。任务(Task)
的定义中,紧随Task
之后的第一个类型表示您的异步操作可能失败的类型。定义:
now : Task x Time
意思(大致翻译):
Time.now
是一个任务,执行时会给你以下两种输出之一:
- 如果失败,则输出类型为
x
的结果。- 如果成功,则输出类型为
Time
的结果。
由于 Time.now
任务永远不会失败,因此错误类型无关紧要。
在 Elm 中,小写类型(a
、b
、x
、comparable
、msg
)表示该类型可以是任何类型,即函数可以使用不同类型的参数。
msg
表示消息类型。comparable
表示必须是一种可以比较两个值的类型(例如,如果函数对该类型的两个值进行比较,以确定哪个更大等)。这对输入类型很有意义。但对于输出类型来说就不太合适了。我想在这种情况下,x
更多地表示“不适用”。Task
类型需要一个错误输出类型,但在这种情况下,它是无关紧要的。
补充说明:要实际获取当前时间,您需要再进行两个步骤:
执行任务,返回一个 Cmd
:
timeCmd = Task.perform identity MyMsg Time.now
这将执行时间任务,并将结果时间包装在 Cmd MyMsg
中。
处理 Cmd
输出:为此,您需要在 update
函数中包含一个 MyMsg
处理程序。