Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解释elm函数声明语法_Elm - Fatal编程技术网

解释elm函数声明语法

解释elm函数声明语法,elm,Elm,我无法掌握elm语言的以下函数声明和定义语法 keyDown: (Int -> Msg) -> Attribute msg keyDown event = on "keydown" (Json.map event keyCode) 第一行是什么意思? keyDown:(Int->Msg)->属性Msg。这是否意味着,keyDown函数接受,Int和Msg类型参数并返回类型属性 函数定义部分到底发生了什么 函数的参数是如何定义的?TL;博士 keyDown函数接受另一个函数作为

我无法掌握elm语言的以下函数声明和定义语法

keyDown: (Int -> Msg) -> Attribute msg
keyDown event = 
  on "keydown" (Json.map event keyCode)
第一行是什么意思?
keyDown:(Int->Msg)->属性Msg
。这是否意味着,
keyDown
函数接受,
Int
Msg
类型参数并返回类型
属性

函数定义部分到底发生了什么

函数的参数是如何定义的?

TL;博士
keyDown
函数接受另一个函数作为参数并返回一个属性,Elm的渲染器使用该属性附加事件侦听器

如果您定义一个类型

type Msg
    = KeyDown Int
KeyDown
充当类型为
Msg
的值的构造函数,因此我们可以说它的隐式类型是
KeyDown:Int->Msg
,这是您想要从DOM事件检索键代码时所需要的

解释 首先,我必须说,正确的实施应该是这样的:

keyDown : (Int -> msg) -> Attribute msg
keyDown tagger =
    on "keydown" (Json.Decode.map tagger keyCode)
签名中必须有
msg
type变量,因此可以在应用程序的不同部分使用此事件侦听器,其中
Html
发出不同类型的
msg

为了了解这里发生了什么,让我们仔细看看

每个DOM事件都表示为带有特定字段的JavaScript对象。要从JavaScript中检索数据,Elm需要将其传递给一个脚本,以确保运行时的类型安全,就像HTTP请求一样

上的
中的解码器预期会产生与属性本身相同类型的消息

默认情况下,解码器解码
Int
值,但我们想要的是发出一些消息

这有助于我们获取
Int
并应用一些
tagger
函数,该函数生成一条消息

译码器 整个
(Json.map event keyCode)
部分本质上是一个
解码器msg
,它应用于事件对象以提取密钥代码并用消息“标记”它。

TL;博士
keyDown
函数接受另一个函数作为参数并返回一个属性,Elm的渲染器使用该属性附加事件侦听器

如果您定义一个类型

type Msg
    = KeyDown Int
KeyDown
充当类型为
Msg
的值的构造函数,因此我们可以说它的隐式类型是
KeyDown:Int->Msg
,这是您想要从DOM事件检索键代码时所需要的

解释 首先,我必须说,正确的实施应该是这样的:

keyDown : (Int -> msg) -> Attribute msg
keyDown tagger =
    on "keydown" (Json.Decode.map tagger keyCode)
签名中必须有
msg
type变量,因此可以在应用程序的不同部分使用此事件侦听器,其中
Html
发出不同类型的
msg

为了了解这里发生了什么,让我们仔细看看

每个DOM事件都表示为带有特定字段的JavaScript对象。要从JavaScript中检索数据,Elm需要将其传递给一个脚本,以确保运行时的类型安全,就像HTTP请求一样

上的
中的解码器预期会产生与属性本身相同类型的消息

默认情况下,解码器解码
Int
值,但我们想要的是发出一些消息

这有助于我们获取
Int
并应用一些
tagger
函数,该函数生成一条消息

译码器
整个
(Json.map event keyCode)
部分本质上是一个
解码器msg
,它应用于事件对象以提取密钥代码并用消息“标记”它。

您好,感谢您的回复。这里的
tagger
是什么?@explorer“tagger”是这些函数的通用名称,用于从解码器检索数据并将其转换为消息。我的问题是语法。你能给我解释一下下面每个部分吗
keyDown tagger=on“keyDown”(Json.Decode.map tagger-keyCode)
。无法解释
按键标记器=
。例如,无法在“keydown”(Json.Decode.map tagger keyCode)上解释
。如果我能做到这一点,那么大多数事情都会突然变得有意义。从文档中,我能够理解
on
函数采用
偶数名称(字符串)
&
解码器
。但是,我无法得到
(Json.Decode.map tagger keyCode)
的确切含义。你能解释一下吗?例如,从
(Json.Decode.map tagger-keyCode)
,我不能理解的是,调用了哪个函数,输入是什么,输出是什么?好的,现在我看到
Json.Decode.map
是一个函数,
tagger
keyCode
map
函数的参数。但是,我仍然无法理解这些参数是如何创建的&在哪里创建的。您好,谢谢您的回复。这里的
tagger
是什么?@explorer“tagger”是这些函数的通用名称,用于从解码器检索数据并将其转换为消息。我的问题是语法。你能给我解释一下下面每个部分吗
keyDown tagger=on“keyDown”(Json.Decode.map tagger-keyCode)
。无法解释
按键标记器=
。例如,无法在“keydown”(Json.Decode.map tagger keyCode)上解释
。如果我能做到这一点,那么大多数事情都会突然变得有意义。从文档中,我能够理解
on
函数采用
偶数名称(字符串)
&
解码器
。但是,我无法得到
(Json.Decode.map tagger keyCode)
的确切含义。您能解释一下吗?例如,从
(Json.Decode.map tagger keyCode)
,我无法理解的是,调用了哪个函数,输入是什么,输出是什么?好的,现在我看到了
Json.Decode.map