Учебники

Вяз — кортежи

Иногда может возникнуть необходимость хранить коллекцию значений различных типов. Elm дает нам структуру данных под названием tuple, которая служит этой цели.

Кортеж представляет собой разнородную коллекцию значений. Другими словами, кортежи позволяют хранить несколько полей разных типов. Кортеж хранит фиксированное количество значений. Кортежи полезны, когда вы хотите вернуть из функции несколько значений разных типов. Эти структуры данных неизменны, как и другие типы вяза.

Синтаксис

(data1,data2)

Простой пример показан ниже —

> ("TuotrialsPoint",5,True,"Hyderabad")
("TuotrialsPoint",5,True,"Hyderabad") : ( String, number, Bool, String )

В наших последующих разделах мы узнаем о различных операциях кортежей.

первый

Эта операция извлекает первое значение из кортежа.

Синтаксис

Tuple.first tuple_name
> Tuple.first
<function> : ( a1, a2 ) -> a1

иллюстрация

> Tuple.first (10,"hello")
10 : number

второй

Вторая операция кортежа извлекает второе значение из кортежа.

Синтаксис

Tuple.second tuple_name
> Tuple.second
<function> : ( a1, a2 ) -> a2

иллюстрация

> Tuple.second (10,"hello")
"hello" : String

Список кортежей

Список может хранить кортежи. Если кортежи используются внутри списка, убедитесь, что все они имеют одинаковый тип данных и имеют одинаковое количество параметров.

иллюстрация

> [("hello",20),("world",30)]
[("hello",20),("world",30)] : List ( String, number )

Кортеж с функцией

Функция может возвращать кортежи. Кроме того, кортежи могут быть переданы в качестве параметров в функции.

Иллюстрация 1

В следующем примере определяется функция fn_checkEven. Эта функция принимает целочисленное значение в качестве параметра и возвращает кортеж.

> fn_checkEven no = \
   if no%2 == 0 then \
      (True,"The no is Even")\
   else \
      (False,"No is not even")
<function> : Int -> ( Bool, String )
> fn_checkEven 10
(True,"The no is Even") : ( Bool, String )
> fn_checkEven 11
(False,"No is not even") : ( Bool, String )
>

Иллюстрация 2

Следующее передает кортеж в качестве параметра функции.

> fn_add (a,b) = \
| a+b
<function> : ( number, number ) -> number
> fn_add (10,20)
30 : number

Функция fn_add принимает кортеж с 2 числовыми значениями и возвращает их сумму.

деструктурирующие

Разрушение включает в себя разбиение кортежа на отдельные ценности. Чтобы получить доступ к отдельным значениям в кортеже с тремя или более элементами, мы используем деструктуризацию. Здесь мы присваиваем каждое значение в кортеже различным переменным. Используя _, можно определить заполнители для значений, которые будут игнорироваться или пропускаться.

иллюстрация

> (first,_,_) = (10,20,30)
10 : number
> first
10 : number

иллюстрация

В этом примере мы будем использовать синтаксис блока let..in для деструктурирования. Блок let содержит переменные, а блок in содержит выражения, которые должны быть оценены, и значение, которое должно быть возвращено.

> t1 = (10,20,30)
(10,20,30) : ( number, number1, number2 )
> let \
(a,b,c) = t1 \
in\
a + b +c
60 : number

Мы объявляем переменные abc в предложении let и обращаемся к ним с помощью предложения in.