2013-06-27 1 views
2

Если я объявляю F # функция:F логический вывод промаха # тип данной информации

let extractColumn col (grid : List<Map<string, string>>) = 
    List.map (fun row -> row.[col]) grid 

компилятор жалуется: FS0752

ошибки: '. Выр [IDX] Оператор был использован на условиях объект неопределенного типа на основе информации до этой точки программы. Рассмотрите возможность добавления дополнительных ограничений типа

Добавления аннотации типа для row параметра лямбды в фиксирует это:

let extractColumn col (grid : List<Map<string, string>>) = 
    List.map (fun (row : Map<string, string>) -> row.[col]) grid 

Почему не может его получить типа row от grid параметра в extractColumn функции в?

ответ

8

Вывод типа F # работает слева направо и сверху вниз.

Тип grid не доступен в части List.map (fun row -> row.[col]).

Использование оператора трубы |>:

let extractColumn col (grid : Map<string, string> list) = 
    grid |> List.map (fun row -> row.[col]) 

делает ваш пример работы, как и ожидалось.

 Смежные вопросы

  • Нет связанных вопросов^_^