Несколько операторов в главном модуле - PullRequest
2 голосов
/ 23 апреля 2019

Как поместить несколько строк утверждений в основной модуль 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?

Установка скобок и запятых не помогает.

1 Ответ

7 голосов
/ 23 апреля 2019

Вяз - это язык, основанный на выражениях. У него нет заявлений, потому что у него нет побочных эффектов. Вместо этого он состоит из выражений, которые возвращают значения, связанные с типами, которые проверяются во время компиляции.

Ваш код является синтаксически допустимым выражением, поэтому я не уверен, как вы получили эту конкретную ошибку. Я не могу воспроизвести его непосредственно на верхнем уровне, где выражения не принадлежат, или в функции, где выражения действительно принадлежат, но там я получаю ошибку типа вместо синтаксической ошибки. Вы пропускаете какую-то важную часть вашего кода.

В любом случае, даже если вы правильно поместите это в функцию, это не будет делать то, что вы хотите. Даже тогда есть множество проблем:

  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 настолько отличается, что метод проб и ошибок, основанный на том, что работает в JavaScript, может привести к разочарованию.

...