今天没事看blog的时候,看到一个小子实现了这个,不过他的程序写的那叫一个丑陋,实在是看不下去,就自己写了个.
原理很简单,那就是首先将要检测的方法重命名掉,然后动态定义一个相同的,这时他就会调用我们定义的这个方法,这时我们就可以检测参数的类型的,检测如果成功,在最后调用我们刚才重命名过的那个方法:
class Object
class << self
def check_type method_name,*arg_type
raise ArgumentError, "method_name is missing" unless new.respond_to?(method_name)
arg_count=new.method(method_name).arity
alias_method :"old_#{method_name}",method_name
define_method(method_name) do |*args|
raise ArgumentError,"wrong number of arguments(#{args.length} of #{arg_count})" if arg_count>=0 and arg_count!=args.length
message=""
args.each_with_index do |item,index|
break if arg_type[index]==nil
message << "argument type is wrong(#{item.class} of #{arg_type[index]}" if item.class!=arg_type[index]
end
raise ArgumentError,message unless message==""
send(:"old_#{method_name}",*args)
end
end
end
end
class Test
def bar(x,y,z)
p [x,y,z]
end
check_type :bar,String
end
Test.new.bar(1,2,5)
Test.new.bar("a",1,2)
分享到:
相关推荐
为了接收这些文件,我们需要在C#的Webservice中创建一个方法,这个方法能够处理HTTP POST请求,其中包含上传的文件。`HttpPostedFileWrapper`是ASP.NET中用于处理上传文件的类,它可以将HTTP请求中的文件流包装成一...
这个名为"小程序上传文件.rar"的压缩包包含了实现这一功能的源代码,适用于学习和参考。以下是该压缩包中涉及的主要知识点: 1. **微信小程序框架**:微信小程序是一种轻量级的应用开发框架,由腾讯推出,它提供了...
微信小程序版百度BOS(Baidu Cloud Storage)上传插件是一款专为微信小程序设计的工具,旨在简化在微信小程序环境中与百度云存储的交互过程。该插件支持三种不同的上传方式:PutObject、PostObject以及...
【小程序完整源码】是一个集合了多种类型小程序项目的资源包,包含了从基础到高级的各种应用场景。这个源码库是开发者学习、研究小程序开发技术的重要参考资料。以下将详细讲解其中可能包含的知识点: 1. **小程序...
这是微信小程序用于上传文件的核心API,它接受一个对象参数,包含`url`(服务器接口地址)、`filePath`(本地文件路径)、`name`(文件字段名)等属性。在上传过程中,我们需要处理好签名认证,确保请求的安全性。 对于...
我们在用python进行程序开发的时候,很多时候我们需要检测一下当前的变量的数据类型。比如需要在使用字符串操作函数之前先检测一下当前变量是否是字符串。下面小编给大家分享一下在python中如何检测数据类型 首先...
### 一种小程序码的识别方法及系统 #### 发明背景与意义 随着移动互联网技术的发展,小程序作为一种轻量级的应用形式,在用户中的普及率日益提高。小程序码作为小程序的重要入口之一,其识别效率直接影响到用户...
可以创建一个函数,读取流的初始部分,然后对比这些标识符来确定图片类型。 ### 示例代码 ```csharp using System.IO; using System.Drawing; public static Image LoadImage(Stream imageStream) { try { // ...
- **同步回调**:支付成功后,微信会返回一个支付结果,小程序可以直接展示给用户。 - **异步回调**:商户服务器需要监听微信支付平台的异步通知,以便在用户支付成功后进行订单状态更新、库存管理等操作。 6. **...
【标题】"抽奖小程序,任意个数及任意次数"是一个基于C#开发的Windows桌面应用程序,利用了Winform框架来创建用户界面。该程序的核心功能是实现抽奖功能,允许用户自定义参与抽奖的奖项数量以及抽奖的次数,同时保证...
在这个“Struts2实例小程序1”中,你将开始接触并理解Struts2的基本概念和工作流程,这对于初学者来说是一个很好的起点。 1. **Struts2入门**: - **MVC模式**:Struts2遵循MVC设计模式,将业务逻辑、数据和展示...
"matlab小程序集锦"是一个集合了数十个Matlab程序的资源包,旨在帮助用户更轻松地学习和掌握Matlab编程技巧。这些小程序涵盖了Matlab的基础操作到高级应用,包括数值计算、图形绘制、图像处理、信号处理等多个方面。...
JavaScript支持动态数据类型,这意味着一个变量可以随时存储不同类型的值。 数据类型包括基本类型(如Number、String、Boolean、Null、Undefined)和引用类型(如Object、Array、Function)。运算符用于进行数学...
标题中的“RS232串行口测试小程序(支持发送回应)”是指一个专门用于测试RS232串行接口的小型应用程序。这个程序允许用户与通过RS232接口连接的设备进行通信,并且能够接收并回应来自这些设备的数据。 **RS232串行...
在“Java小程序集锦”中,我们可以探索一系列与Java编程相关的精彩示例。这些小程序涵盖了各种主题,旨在帮助开发者深入理解和应用Java语言...这些小程序就像一个个微缩的实战项目,对于学习和教学Java语言都极具价值。
"C语言200个小程序源代码"是一个专门为初学者设计的学习资源,它包含了一系列从小到大的C语言程序,旨在帮助学习者逐步掌握C语言的核心概念和编程技巧。 1. **基本语法与结构**:C语言的基础在于它的语法,包括变量...
"C# 50个经典小程序(新手必备)"是一个专门为初学者设计的学习资源,旨在通过实践帮助新入行的开发者快速掌握C#的基本概念和编程技巧。下面我们将详细探讨这些经典小程序所涵盖的知识点。 1. **基础语法**:C#的基本...
在这个特定的场景中,我们关注的是微信小程序的支付功能,这是微信小程序开发中的一个重要组成部分。 在微信小程序中实现支付功能,主要涉及以下几个核心知识点: 1. **微信支付API**:微信提供了专门的小程序支付...
1. 创建CATIA应用程序实例:程序首先尝试获取一个已存在的CATIA应用程序实例,如果未找到,则创建一个新的实例,并设置其可见性为可见。 2. 新建零件文档:在CATIA中新建一个零件(Part)文档,并获取该零件文档和...
3.4 在生成的程序集中引用一个强命名程序集 3.5 强命名程序集能防范篡改 3.6 延迟签名 3.7 私有部署强命名程序集 3.8 “运行时”如何解析类型引用 3.9 高级管理控制(配置) 3.9.1 发布者策略控制 第4章 类 型...