Excel Dna / F#中的多态

时间:2019-04-06 06:30:47

标签: f# excel-dna

在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'

我看到this previous question在Govert建议使用“注册扩展名”的地方,但是我还没有找到如何使用它来回答我当前的问题。

2 个答案:

答案 0 :(得分:4)

编写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 :(得分:1)

For Registration samples

<table id="mem_list_table" class="stats_table display table-responsive cell-border table-hover" style="width:100%; margin-top: 10px;"> <thead> <tr> </tr> </thead> <tbody> </tbody> </table> <script> $(function() { $.fn.dataTable.ext.search.push( function( settings, data, dataIndex ) { var min = parseInt( $('#min').val(), 10 ); var max = parseInt( $('#max').val(), 10 ); var age = parseFloat( data[4] ) || 0; // use data for the age column if ( ( isNaN( min ) && isNaN( max ) ) || ( isNaN( min ) && age <= max ) || ( min <= age && isNaN( max ) ) || ( min <= age && age <= max ) ) { return true; } return false; } ); }); </script>