Полиморфизм в Excel Dna / F # - PullRequest
       23

Полиморфизм в Excel Dna / F #

3 голосов
/ 06 апреля 2019

В F # / Excel-Dna, какой идиоматический способ переписать следующую функцию для вектора строк?(то есть функция, которая сортирует «вектор» (= 1d диапазон Excel) строк).

[<ExcelFunction(Category="Some Cat", Description="Sort 1d range filled with doubles.")>]
    let mySortDouble (vect : double[]) : double[] = 
        Array.sort vect

Если я просто заменю двойные типы строковыми типами в приведенном выше фрагменте, я получу следующее сообщение об ошибке:Initialization [Error] Method not registered - unsupported signature, abstract or generic: 'MyFSFunctions.mySortString'

Я видел этот предыдущий вопрос , где Говерт предлагает использовать «Расширения регистрации», но я не нашел, как его использовать, чтобы ответить на мой текущий вопрос.

Ответы [ 2 ]

4 голосов
/ 06 апреля 2019

Поскольку вы написали mySortDouble, он даже не скомпилируется, потому что он возвращает double [], а не double.

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

[<ExcelFunction(Category="Some Cat", Description="Sort 1D range of strings.")>]
let SortStrings (vect : obj[]) = 
    try
        vect
        |> Seq.cast<string>
        |> Seq.sort
        |> Seq.toArray
        |> box
    with
    | ex -> box ExcelError.ExcelErrorNA
1 голос
/ 09 апреля 2019

Для регистрации образцов

ParameterConversionConfiguration() .AddReturnConversion(fun (values: double[]) -> Array.map (string >> box) values )

...