2015-06-21 3 views
0

Почему это не работает?Типизированное назначение массива в F #

open System 
let ary = Array.create<Int16> 10 
ary.[0] <- 42 // compiler error 
printfn "%d" ary.[0] // compiler error 

Я получаю ошибку что-то вроде:

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

ответ

2

Сигнатуры Array.create<'T> является:

Array.create : int -> 'T -> 'T [] 

В настоящее время вы только предоставляете первый аргумент (число элементов для создания), так ary фактически является функция: Int16 -> Int16 []

Вам необходимо передать второй аргумент, который является значением, используемым для элементов в массиве:

let ary = Array.create<Int16> 10 0s 

Если вы хотите значение по умолчанию типа, которые будут использоваться для всех элементов в массиве (как в приведенном выше примере), то вы можете использовать Array.zeroCreate, как @Sehnsucht указал

+4

или использовать 'Array.zeroCreate 10' – Sehnsucht

+0

Спасибо! Мне нужно привыкнуть к чтению этих сообщений компилятора - особенно привыкнуть к этим типам подписей! – wmercer

+0

Без проблем и @Sehnsucht это хорошая точка. –

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