F#7: Пластинки

Итак, мы продолжаем наше путешествие к новым типам F#.

На этот раз мы рассмотрим типы сообщений.



Как создать публикацию?

Когда вы создаете новую запись F#, она может напоминать вам об анонимных объектах в C#.

Вот как вы их создаете.

Я думаю, что они очень похожи на анонимные объекты в C#, поэтому, если вы использовали C#, записи F# не должны вызывать затруднений.

Все начинается с создания нового типа записи.

В определении типа перечислены имена свойств, а также тип свойств, это можно увидеть ниже.

Если у вас есть определение типа записи, вы можете связать новый экземпляр со значением, используя Let. Опять же пример этого можно увидеть ниже, где мы привязываем новую запись с помощью привязки Let, а также печатаем значения свойств экземпляра записи на вывод консоли.

  
  
  
  
  
   

type Person = { Age : int; Sex: string; Name:string; } .

.

.

.

let sam = { Age = 12; Sex="Male"; Name ="Sam" } printfn "let sam = { Age = 12; Sex=\"Male\"; Name=\"Sam\" }" printfn "Person with Age is %i and Sex is %s and Name is %s" sam.Age sam.Sex sam.Name



F#7: Пластинки



Как я могу редактировать/клонировать запись

Вы можете клонировать и изменять запись, что обычно делается следующим образом:

let sam = { Age = 12; Sex="Male"; Name ="Sam" } let tom = { sam with Name="Tom" } printfn "let tom = { sam with Name=\"Tom\" }" printfn "Person with Age is %i and Sex is %s and Name is %s" tom.Age tom.Sex tom.Name



F#7: Пластинки

Обратите внимание, как мы использовали ключевое слово «with» при создании нового экземпляра Tom Person. Такая форма выражения называется « копировать и обновлять выражение записи Другой вариант, который вы можете использовать (опять же, мы поговорим об этом более подробно в следующем посте) — использовать изменяемое свойство для вашего типа сообщения.

Записи: неизменный по умолчанию; однако вы также можете явно указать поле для изменения.

Вот пример: обратите внимание, как я создал новый тип с изменяемым свойством MutableName. Определив изменяемое поле, я могу обновить значение свойства MutableName записи, что вы можете сделать с помощью "<-" operator. Which simply allows you to assign a new value.

type MutableNamePerson = { Age : int; Sex: string; mutable MutableName:string; } .

.

.

.

//create let sam = { Age = 12; Sex="Male"; MutableName ="Sam" } printfn "let sam = { Age = 12; Sex=\"Male\"; Name=\"Sam\" }" printfn "Person with Age is %i and Sex is %s and Name is %s" sam.Age sam.Sex sam.MutableName //update sam.MutableName <- "Name changed" printfn "sam.MutableName <- \"Name changed\"" printfn "Person with Age is %i and Sex is %s and Name is %s" sam.Age sam.Sex sam.MutableName



F#7: Пластинки



Сравнение записей

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

Вот пример:

type Person = { Age : int; Sex: string; Name:string; } .

.

.

.

let someFunction p1 p2 = printfn "p1=%A, and p2=%A, are they equal %b" p1 p2 (p1=p2) let sam = { Age = 12; Sex = "Male"; Name = "Sam" } let john = { Age = 12; Sex = "Male"; Name = "John" } let april = { Age = 35; Sex = "Female"; Name = "April" } let sam2 = { Age = 12; Sex = "Male"; Name = "Sam" } do someFunction sam john do someFunction sam april do someFunction sam sam2



F#7: Пластинки



Запись шаблонов сравнения

Конечно, вы можете использовать сопоставление с образцом (обсуждение в другой день), которое является основным методом F#, для сопоставления типов сообщений.

Вот пример:

type Person = { Age : int; Sex: string; Name:string; } .

.

.

.

let someFunction (somePerson :Person) = match somePerson with | { Name="Sam" } -> printfn "Sam is in the house" | _ -> printfn "you aint Sam, get outta here clown" let sam = { Age = 12; Sex="Male"; Name ="Sam" } let john = { Age = 12; Sex="Male"; Name ="John" } do someFunction sam do someFunction john



F#7: Пластинки



Методы и свойства

Также возможно добавлять в записи дополнительных участников.

Вот пример, в котором мы добавляем свойство «Подробности», чтобы позволить нам получить полную информацию о записи, используя одно свойство (настолько, насколько мы могли бы достичь, переопределив метод ToString(), но подробнее о методах ООП позже).

Обратите внимание: если вы попытаетесь добавить элемент в определение типа записи, как показано на скриншоте, вы получите странную ошибку.



F#7: Пластинки

Это легко решить, просто поместив определения свойств записи на новую строку и убедившись, что элемент также начинается с новой строки, и следите за отступом (пробелом), поскольку все это важно в F #:

type Person = { Age : int; Sex: string; Name:string; } member this.Details = this.Age.ToString() + " " + this.Sex.ToString() + " " + this.Name .

.

.

.

let sam = { Age = 12; Sex = "Male"; Name = "Sam" } printfn "sam Details=%s" sam.Details



F#7: Пластинки

Теги: #.

NET #F#

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.