以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 内部函数的调用 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=133990) |
-- 作者:夏许多雪 -- 发布时间:2019/4/24 19:41:00 -- 内部函数的调用 下面是一个自行编制的内部函数 Lex,其中的第一个参数代表数据表中满足条件的行数减一,第二个参数为各行相同的一个数据,后面的参数从为表中满足条件的各行中提取四列的数据顺序填入。由于行数(即第一 个参数)是不确定的,也就是说,函数的参数量是不确定的, 如:Output.Show(Functions.Execute("Lex",0,6,4,85,86,89)) 计算结果为 84.4 Output.Show(Functions.Execute("Lex",1,6,4,85,86,89,2,96,99,98.5))计算结果为93.2 Output.Show(Functions.Execute("Lex",2,6,4,85,86,89,2,96,99,98.5,4,95.6,98.8,97))计算结果为97.2 上面举例为1、2、3行的情况下计算方式,但在不确定行数情况下请问怎么调用这个函数? Dim i As Integer = args(0) Dim d As Single = args(1) Dim Lex As Single Dim t() As List(of Single) Dim l() As List(of Single) Dim ttotal As Single = 0 Dim Ltotal As Single = 0 For k As Integer = 0 To i ttotal = ttotal + args( 2 + 4 * k) Ltotal = Ltotal + args( 2 + 4 * k) * 10^(0.1 * (args( 3 + 4 * k) + args( 4+ 4 * k) + args( 5 + 4 * k)) / 3) Next Lex = 10 * Math.log10(d / 5 * 10^( 0.1 * (10 * Math.log10(Ltotal / ttotal) + 10 * Math.log10(ttotal / 8)))) Return Format(Lex,"#0.0") [此贴子已经被作者于2019/4/24 19:43:33编辑过]
|
-- 作者:有点甜 -- 发布时间:2019/4/24 21:01:00 -- 用 (args.length - 2) \\ 4 - 1 即可 |
-- 作者:夏许多雪 -- 发布时间:2019/4/24 21:45:00 -- 我问的是args的长度不确定的情况下,如何引用自定义函数,如符合条件的行数为 i 行,哪么 参数应该有 4i+2个,其中第1个参数args(0)为i-1,第2个参数args(1)为d,后面还有4i个参数从args(2)至args(4i+1),引用函数时应按如下写: Functions.Execute("Lex",i-1,d,args(2),args(3)...........args(4i+1)) 但省略号部分无法写,只能一一列举 i 的值来写,请问有什么简单的方法来写吗,如 i-1,d,args(2),args(3)...........args(4i+1) 部分用字符串来表示是否可以等。
|
-- 作者:有点甜 -- 发布时间:2019/4/24 21:55:00 -- 不理解你的意思。
如果是调用的问题,你可以直接传一个字符串进去,然后你根据逗号,分割出各个字符,然后计算。
|
-- 作者:有点甜 -- 发布时间:2019/4/24 21:55:00 -- 或者是,你可以直接合成一个数组,传进去。 |
-- 作者:夏许多雪 -- 发布时间:2019/4/24 22:16:00 -- 我的意思是如下引用max函数 Dim t() As Single= {1,2,3} Output.Show(Functions.Execute("Max",t(0),t(1),t(2))) 上面数组是3个数是可以的,但是,如果数组的个数 i 如果不确定,或者很长,如何引用 Max函数。可不可以写成诸如: Dim t() As Single= {1,2,3,.........,i} Output.Show(Functions.Execute("Max",t)) |
-- 作者:夏许多雪 -- 发布时间:2019/4/24 22:23:00 -- 为什么如下代码,计算出的是123,而不是3?这是不是版主说的传一个字符串进去? Dim t As String = "1,2,3" Output.Show(Functions.Execute("Max",t))
[此贴子已经被作者于2019/4/24 23:22:56编辑过]
|
-- 作者:有点甜 -- 发布时间:2019/4/24 23:28:00 -- 改成
Dim t As String = "1,2,3"
Output.Show(Functions.Execute("Max",t.split(",")))
|
-- 作者:夏许多雪 -- 发布时间:2019/4/25 10:16:00 -- 自定义Max函数为: Dim MaxVal As Single = Args(0) For i As Integer = 1 To Args.Length - 1 MaxVal = Math.Max(MaxVal,Args(i)) Next Return MaxVal 按版主的编码, Dim t As String = "1,2,3" Output.Show(Functions.Execute("Max",t.split(","))) 运行后出现错误的详细信息如下,这是什么问题? .NET Framework 版本:2.0.50727.8940 Foxtable 版本:2019.4.12.1 错误所在事件:自定义函数Max 详细错误信息: 调用的目标发生了异常。 重载决策失败,必须进行收缩转换才能调用 Public“Max”: \'Public Shared Function Max(val1 As ULong, val2 As ULong) As ULong\': 与参数“val1”匹配的参数从“Single”收缩到“ULong”。 与参数“val2”匹配的参数从“String”收缩到“ULong”。 \'Public Shared Function Max(val1 As Long, val2 As Long) As Long\': 与参数“val1”匹配的参数从“Single”收缩到“Long”。 与参数“val2”匹配的参数从“String”收缩到“Long”。 \'Public Shared Function Max(val1 As Single, val2 As Single) As Single\': 与参数“val2”匹配的参数从“String”收缩到“Single”。 \'Public Shared Function Max(val1 As Decimal, val2 As Decimal) As Decimal\': 与参数“val1”匹配的参数从“Single”收缩到“Decimal”。 与参数“val2”匹配的参数从“String”收缩到“Decimal”。 \'Public Shared Function Max(val1 As Double, val2 As Double) As Double\': 与参数“val2”匹配的参数从“String”收缩到“Double”。 \'Public Shared Function Max(val1 As UInteger, val2 As UInteger) As UInteger\': 与参数“val1”匹配的参数从“Single”收缩到“UInteger”。 与参数“val2”匹配的参数从“String”收缩到“UInteger”。 \'Public Shared Function Max(val1 As Byte, val2 As Byte) As Byte\': 与参数“val1”匹配的参数从“Single”收缩到“Byte”。 与参数“val2”匹配的参数从“String”收缩到“Byte”。 \'Public Shared Function Max(val1 As SByte, val2 As SByte) As SByte\': 与参数“val1”匹配的参数从“Single”收缩到“SByte”。 与参数“val2”匹配的参数从“String”收缩到“SByte”。 \'Public Shared Function Max(val1 As Short, val2 As Short) As Short\': 与参数“val1”匹配的参数从“Single”收缩到“Short”。 与参数“val2”匹配的参数从“String”收缩到“Short”。 \'Public Shared Function Max(val1 As Integer, val2 As Integer) As Integer\': 与参数“val1”匹配的参数从“Single”收缩到“Integer”。 与参数“val2”匹配的参数从“String”收缩到“Integer”。 \'Public Shared Function Max(val1 As UShort, val2 As UShort) As UShort\': 与参数“val1”匹配的参数从“Single”收缩到“UShort”。 与参数“val2”匹配的参数从“String”收缩到“UShort”。 |
-- 作者:有点甜 -- 发布时间:2019/4/25 13:32:00 -- 改成
MaxVal = Math.Max(MaxVal, val(Args(i))) |