以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]带数组的自定义函数出现错误,不知原因 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=39498) |
||||
-- 作者:loongtai -- 发布时间: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 运行报错:
|
||||
-- 作者:有点甜 -- 发布时间:2013/8/25 22:39:00 -- 报错是正常的,你需要这样调用。 dim ary() as Single = {3,4,5} Function.Execute("xxxx", ary, false)
|
||||
-- 作者:loongtai -- 发布时间: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 调用结果: |
||||
-- 作者:Bin -- 发布时间:2013/8/26 9:13:00 -- 上例子看看吧 |
||||
-- 作者:loongtai -- 发布时间:2013/8/26 9:56:00 -- [求助]自定义函数
两个自定义函数可以通过 命令窗口--内部函数 来调试。
[此贴子已经被作者于2013-8-26 9:57:49编辑过]
|
||||
-- 作者:Bin -- 发布时间:2013/8/26 10:14:00 -- .
|
||||
-- 作者:loongtai -- 发布时间:2013/8/26 10:29:00 -- 不好意思,低级错误。见笑了! |