2017-01-24 10 views
2

В F # вы можете передать строку в междунар через |> оператора, как это:F # Pass строку в список

"54" |> int 

мне было интересно, если есть способ сделать это для списка, как это:

"[4;2;3]" |> list 

При попытке сделать это для списка он ошибочно указывает, что значение или конструктор не определены.

Возможно, это невозможно?

+1

Что вы ожидаете от результата для «[4; 2; 3]» |> списка? – Kevin

+0

обычный список [4; 2; 3], что я могу извлечь элементы из и работать с – Nulle

ответ

5

int - это функция, которая может преобразовывать строку (и другие вещи) в int.

Нет встроенной функции, называемой list. Для того, чтобы сделать список, вы можете использовать список буквальный синтаксис: [4;2;3]

Если вам нужно разобрать строку как "[4;2;3]" в int list, то вы по своему усмотрению. Вам нужно написать код, чтобы сделать это. Например:

let parseIntList (str:string) = 
    let trimmed = str.Trim() 
    if not (trimmed.StartsWith "[" && trimmed.EndsWith "]") then failwith "Not a list" 
    trimmed.[1 .. trimmed.Length - 2].Split ';' 
    |> Array.map int 
    |> Array.toList 

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

+0

. Должно ли это быть 'int - конструктор, который может построить int из строки?? –

+1

Согласно документации 'int', это действительно не конструктор, но обертывает статический' Int32.Parse' (пока не удалось найти местоположение исходного кода) –

+2

Это функция, определенная здесь: https: // github .com/fsharp/fsharp/blob/4.0.1.20/src/fsharp/FSharp.Core/prim-types.fs # L4298 – TheQuickBrownFox