注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

古城风~~~

竹密无妨溪水过,天高不碍白云飞。这天下总有一份是属于我古城的天地!

 
 
 

日志

 
 

asp,vbscript 函数中实现可变参数,省略参数  

2011-01-17 11:29:43|  分类: asp |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

vbscript 函数的参数是固定的,不能实现php中的参数省略,更不用说可以实现高级语言中的重载了。
有时候写好了一个函数,当然是可以满足当前的需求的,可是到了后期,随着需求的变化,可能要
在函数中增加一两个参数,但是因为在前期已经把这个函数应用到很多地方了,再想改已经是不可能的了,无奈,只好又重新写一个功能差不多的函数。
有没有一种方法,函数的参数可以动态增加或减少,这样就可以直接在函数内部通过不同参数值返回不同的结果?
答案是肯定的,可以通过Dictionary对象来实现无限个参数的设置。
基本思路:参数是通过数组传递,在函数内部将参数数组转为dictionary对象使用,数组是一维或二维数组,形式如下:
程序代码
<%
     Dim ary
     ary = array( array("Uid",1024) , array("UserName","xilou") ,array("QQ","39949376") )
     '或者
     ary = array( "Uid:1024" , "UserName:xilou" , "QQ:39949376" )
    
     '将会把该数组转化为dictionary,则可以使用如下形式使用:
     Response.Write ht("Uid") & ht("UserName") & ht("QQ")
%>
具体代码如下:
程序代码
<%
     '将数组转化为dictionary对象存储
     'hashObj : dictionary对象
     'ary     : 数组,格式必须为以下两种之一,第一种只能存储字符串值
     '         : array("Id:12","UserName:xilou","Sex:1"),即array("key:value",...)格式
     '         : array(array("Id","12"),array("UserName","xilou"),array("Sex","1"))
     '返回dictionary对象
     Sub AryAddToHashTable(ByRef hashObj,ary)
         Dim str,ht,i,k,v,pos
         For i = 0 To UBound(ary)
             If IsArray(ary(i)) Then
                 If IsObject(ary(i)(0)) Then
                     Response.Write "Error:AryToHashTable(ary),键值不可以是一个对象类型,"
                     Response.Write "当前ary("& i &")(0)值类型为:" & TypeName(ary(i)(0))
                     Response.End()
                 End If
                 If IsObject(ary(i)(1)) Then '如果值是一个对象
                     Set hashObj(ary(i)(0)) = ary(i)(1)
                 Else
                     hashObj(ary(i)(0)) = ary(i)(1)
                 End If
             Else
                 str = ary(i) & ""
                 pos = InStr(str,":")
                 If pos < 1 Then
                     Response.Write "Error:AryToHashTable(ary),"":""不存在"
                     Response.Write ",发生在:" & ary(i)
                     Response.End()
                 End If
                 If pos = 1 Then
                     Response.Write "Error:AryToHashTable(ary),键值不存在"
                     Response.Write ",发生在:" & ary(i)
                     Response.End()
                 End If
                 k = Left(str,pos-1)
                 v = Mid(str,pos+1)
                 hashObj(k) = v
             End If
         Next
     End Sub
     '将数组转化为dictionary对象存储
     'ary : 数组,格式必须为以下两种之一,第一种只能存储字符串值
     '     : array("Id:12","UserName:xilou","Sex:1"),即array("key:value",...)格式
     '     : array(array("Id","12"),array("UserName","xilou"),array("Sex","1"))
     '返回dictionary对象
     Function AryToHashTable(ary)
         Dim str,ht,i,k,v,pos
         Set ht = Server.CreateObject("Scripting.Dictionary")
         ht.CompareMode = 1
         AryAddToHashTable ht , ary
         Set AryToHashTable = ht
     End Function
%>
使用例子:
程序代码
<%
    
     Dim ary,rs
    
     '定义函数,获取新闻
     '返回recordset对象
     Function GetNews(param)
         Dim ht
         Set ht = AryToHashTable(param) '将参数数组转为dictionary对象
         '开始使用
         If ht("n") = -1 Then '如果参数n为-1表示不限制哪一条新闻
        
         End If
         If ht("isCheck") Then '如果参数isCheck为true则选取通过审核的新闻
            
         End If
     End Function
    
     '调用函数
     '参数是通过数组传递,在函数内部将参数数组转为dictionary对象使用
     Set rs = GetNews(array(array("n",-1),array("isCheck",false)))
%>

 

资料来源于网络。

  评论这张
 
阅读(641)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017