2016-02-12 13 views
5

Czy F # ma własne biblioteki manipulacji ciągami?Czy F # ma własne biblioteki manipulacji ciągami?

Próbuję nauczyć się F #, używam istniejących metod System.string?

Czy powinienem to robić?

Kod:

open System 

type PhoneNumber = 
    { CountryCode:int 
     Number:string } 

// b. Create a function formatPhone that accepts a PhoneNumber record and formats it to look like something like this: "+44 1234 456789" 
let formatPhone phoneNumber = 

    let getLeadingCharacters (length:int) (text:string) = 
     text.Substring(0, length) 

    let getLastCharacters (length:int) (text:string) = 
     text.Substring(text.Length - length, length) 

    printf "+%i %s %s" phoneNumber.CountryCode 
         (phoneNumber.Number |> getLeadingCharacters 4) 
         (phoneNumber.Number |> getLastCharacters 6) 

formatPhone { CountryCode=44; Number="123456789" };; 

UPDATE

Updated funkcja od:

let formatPhone phoneNumber = 

    let getLeadingCharacters (length:int) (text:string) = 
     text.Substring(0, length) 

    let getLastCharacters (length:int) (text:string) = 
     text.Substring(text.Length - length, length) 

    printf "+%i %s %s" phoneNumber.CountryCode 
         (phoneNumber.Number |> getLeadingCharacters 4) 
         (phoneNumber.Number |> getLastCharacters 6) 

formatPhone { CountryCode=44; Number="123456789" };; 

do:

let formatPhone phoneNumber = 

    printf "+%i %s %s" phoneNumber.CountryCode 
         phoneNumber.Number.[0..3] 
         phoneNumber.Number.[4..8] 

formatPhone { CountryCode=44; Number="123456789" };; 
+2

tworzę takie małe * funkcje antykorupcyjnych * jak 'getLeadingCharacters' cały czas. Wydaje mi się to zupełnie normalne. –

+0

"Przeciw korupcji"? –

+1

Przyjęto termin * warstwa przeciwdziałająca korupcji * z [DDD] (http://amzn.to/WBCwx7). –

Odpowiedz

8

Nie, F # nie ma specyficznej String library, która duplikuje bibliotekę .NET. Ma on string module z dodatkowymi funkcjami łańcuchowymi.

Tak, użyj funkcji .NET.

Fakt, że F # może korzystać ze wszystkich bibliotek .NET jest jedną z najsilniejszych funkcji. Z początku wydaje się dziwne mieszanie funkcji za pomocą parametrów curry z funkcjami z .NET przy użyciu parametrów krotek.

Dlatego w NuGet zobaczysz pakiety, które również mają rozszerzenie FSharp. na przykład MathNet Numerics i MathNet Numerics FSharp. Są to funkcje owijające, które pozwalają na idiomatyczne użycie F # biblioteki .NET.

Szukając funkcji i metod użycia z F # często używam tej sztuczki. Aby wyszukać .NET użyj class jako słowa kluczowego i wyszukaj kod specyficzny dla F #, używając jako słowa kluczowego module.

Na przykład:

Google: MSDN string class
Pierwszy element: String Class

Google: MSDN string module
Pierwszy element: Core.String Module (F#)

+0

Jesteś bogactwem wiedzy. Jak mogę Cię śledzić? Na przykład: YouTube, blogi, podkasty itp. –

+2

Mam większość mojej wiedzy, podążając za [najlepszymi odpowiedziami] (http://stackoverflow.com/tags/f%23/topusers) i czytając większość nowe pytania tutaj. Czytam dużo prac badawczych w [CiteSeer] (http://citeseer.ist.psu.edu/index) i piszę dużo i dużo kodu. Ostatnie kilka miesięcy spędziłem na podstawach sieci neuronowych i problemach, nawet jeśli ich rozwiązanie zajmuje tydzień lub więcej. Niedawno dowiedziałem się, że jednym z najlepszych sposobów debugowania sieci neuronowych jest obrazowanie wizualne i nie patrzenie na wartości wszystkich wag i błędów. –

Powiązane problemy