Foxtable(狐表)用户栏目专家坐堂 → [求助]带数组的自定义函数出现错误,不知原因


  共有4965人关注过本帖树形打印复制链接

主题:[求助]带数组的自定义函数出现错误,不知原因

帅哥哟,离线,有人找我吗?
loongtai
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:574 积分:4332 威望:0 精华:0 注册:2013/7/26 10:24:00
[求助]带数组的自定义函数出现错误,不知原因  发帖心情 Post By:2013/8/25 22:30:00 [只看该作者]

自己编了一个一维排序的自定义函数,如果不带参数,直接用数组赋值,在命令窗口执行,没有问题,可是一旦写成自定义函数,则运行报错。
自定义函数如下:
Dim arr() As Single=Args(0)
Dim lst As new List(of Single)
lst.addrange(arr)
output.clear
Dim fx As Boolean=Args(1)
Dim dtb As new DataTableBuilder("一维排序临时表")
dtb.adddef("新序号",Gettype(Integer))
dtb.adddef("原序号",Gettype(Integer))
dtb.adddef("值",Gettype(Single))
dtb.Build()
With Tables("一维排序临时表")
    For i As Integer=0 To lst.count-1
        .ADDnew()
        .rows(i)("原序号")=i
        .rows(i)("值")=lst(i)
    Next
    If fx=False Then
        .sort="值"
    Else
        .sort="值 DESC"
    End If
    For j As Integer=0 To lst.count-1
        .rows(j)("新序号")=j
        lst(j)=.rows(j)("值")
        output.show(j &","& lst(j) & Vbcrlf)
    Next
End With
Return lst
运行报错:

图片点击可在新窗口打开查看此主题相关图片如下:截图00.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/8/25 22:39:00 [只看该作者]

 报错是正常的,你需要这样调用。

dim ary() as Single = {3,4,5}
Function.Execute("xxxx", ary, false)

 回到顶部
帅哥哟,离线,有人找我吗?
loongtai
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:574 积分:4332 威望:0 精华:0 注册:2013/7/26 10:24:00
  发帖心情 Post By:2013/8/26 9:05:00 [只看该作者]

按照你的方法来修改的确好使。
我想在自定义函数“求约数”中引用自定义函数“一维排序”,可在使用过程中又出现了一个新问题 :在求约数能得到正确结果的情况下,引用“一维排序”以后,得到的集合多了一组值(0,0),我测试了下,发现多出来的值是最后一个。
以下是“求约数”及“一维排序”的代码
求约数:
Dim a As Integer=args(0)
Dim bs As new List(of Integer)
Dim c As Integer
Dim bsn As Integer
output.Clear
If a>0 AndAlso cint(a)=cdbl(a)  Then
    For i As Integer=1 To math.floor(math.sqrt(a))
        If a Mod i = 0 Then
            bs.add(i)
            bs.add(a\i)
            c=c+2
          End If
    Next
    bsn=bs.count
    Dim arr(bsn) As Single
    output.show("排序前:" &vbcrlf)
    For j As Integer=0 To bsn-1 
        arr(j)=Csng(bs(j))
        output.show(j &","& arr(j))
    Next

    Functions.Execute("一维排序",arr,False)
Else
   MessageBox.show("求解的数必须是正整数!")
End If
Return bs

一维排序:
Dim lst As new List(of Single)
Dim arr() As Single=Args(0)
lst.addrange(arr)
output.show("引用一维排序还未排序前集合内数目:" & lst.count &vbcrlf)
For k As Integer=0 To lst.count-1
    output.show(k &","& lst(k))
Next
Dim fx As Boolean=Args(1)
Dim dtb As new DataTableBuilder("一维排序临时表")
dtb.adddef("新序号",Gettype(Integer))
dtb.adddef("原序号",Gettype(Integer))
dtb.adddef("值",Gettype(Single))
dtb.Build()
With Tables("一维排序临时表")
    For i As Integer=0 To lst.count-1
        .ADDnew()
        .rows(i)("原序号")=i
        .rows(i)("值")=lst(i)
    Next
    If fx=False Then
        .sort="值"
    Else
        .sort="值 DESC"
    End If
    output.show("排序后集合:" &vbcrlf)
    For j As Integer=0 To lst.count-1
        .rows(j)("新序号")=j
        lst(j)=.rows(j)("值")
        output.show(j &","& lst(j) )
    Next
End With

调用结果:

图片点击可在新窗口打开查看此主题相关图片如下:截图02.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/8/26 9:13:00 [只看该作者]

上例子看看吧

 回到顶部
帅哥哟,离线,有人找我吗?
loongtai
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:574 积分:4332 威望:0 精华:0 注册:2013/7/26 10:24:00
[求助]自定义函数  发帖心情 Post By:2013/8/26 9:56:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:例子-自定义函数测试.zip

两个自定义函数可以通过   命令窗口--内部函数   来调试。
[此贴子已经被作者于2013-8-26 9:57:49编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/8/26 10:14:00 [只看该作者]

.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:例子-自定义函数测试.table


 回到顶部
帅哥哟,离线,有人找我吗?
loongtai
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:574 积分:4332 威望:0 精华:0 注册:2013/7/26 10:24:00
  发帖心情 Post By:2013/8/26 10:29:00 [只看该作者]

不好意思,低级错误。见笑了!

 回到顶部