首页 > 解决方案 > 主模块中的多个语句

问题描述

如何在 Elm 主模块中放置多行语句

例子,

module Main exposing (main)
import Html exposing (text)

main =
  text "1"
  text "2"

以上不起作用并给出此错误

Detected errors in 1 module.
-- TOO MANY ARGS -------------------------------------------------- src/Main.elm

The `text` function expects 1 argument, but it got 3 instead.

5|>  text "1"
6|   text "2"

Are there any missing commas? Or missing parentheses?

加上括号和逗号没有帮助。

标签: syntax-errorelm

解决方案


Elm 是一种基于表达式的语言。它没有语句,因为它没有副作用。相反,它由表达式组成,这些表达式返回与在编译时验证的类型相关联的值。

您的代码在语法上是一个有效的表达式,所以我不确定您是如何得到该特定错误的。我无法直接在不属于表达式的顶层或在表达式确实属于的函数中重现它,但我得到的是类型错误而不是语法错误。您遗漏了代码的一些重要部分。

无论如何,即使你把它正确地放入一个函数中,它也不会做你想要的。即便如此,仍然存在多个问题:

  1. 您的代码将被解释为应用于函数text'1'text和的三个参数'2',因为换行符并不重要。

  2. '1'是字符文字,而不是字符串文字。"1"是一个字符串文字。

  3. 无论您要使用它,它很可能需要一个元素,而不是元素列表。

返回两个元素作为一个元素的正确方法是将两个元素包装在父元素中,例如“span”:

module Main exposing (main)

import Html exposing (text, span)

main =
    span []
        [ text "1"
        , text "2"
        ]

最后,我建议您按照Elm 官方指南开始学习。Elm 的不同之处在于,基于 JavaScript 中常用的试错方法可能只会导致挫败感。


推荐阅读