乙個檢測方法的引數型別的小程式

2021-08-29 12:45:05 字數 1065 閱讀 8376

今天沒事看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

define_method(method_name) do |*args|

raise argumenterror,"wrong number of arguments(# of #)" 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(# of #" if item.class!=arg_type[index]

endraise argumenterror,message unless message==""

send(:"old_#",*args)

endend

endend

class test

def bar(x,y,z)

p [x,y,z]

endcheck_type :bar,string

endtest.new.bar(1,2,5)

test.new.bar("a",1,2)

乙個快速檢測系統CPU負載的小程式

在對伺服器進行維護時,有時也遇到由於系統 cpu 利用率 負載過高導致業務中斷的情況。伺服器上可能執行多個程序,檢視單個程序的 cpu 都是正常的,但是整個系統的 cpu 負載可能是異常的。通過指令碼對系統 cpu 負載進行時時監控,可以在異常時及時傳送告警,便於維護人員及時處理,預防事故發生。下面...

由乙個小程式引發對 size type型別的思考

今天第一天看 演算法導論 看了插入排序演算法。想用c 練習一下,恰好最近也在複習動態陣列以及vector,想分別用動態陣列和vector實現上面的功能。首先,用動態陣列實現沒事,程式如下 用動態陣列實現陣列元素從小到大的排序 includeusing namespacestd int main p ...

js檢測型別的方法小彙總

檢視 1.typeof操作符 注意,null 2.instanceof 檢測型別 3.object.prototype.tostring.call 以下均返回的是布林值 3.1 判斷是否是陣列 function isarray o return object.prototype.tostring.c...