ruby通过循环执行多个函数的方法

需求:有多个函数需要顺序执行。

mainfunc
    begin
        subfunc1(para1)
    rescue
        do 1
        do 2
        do 3
    end
    begin
        subfunc2(para2)
    rescue
        do 1
        do 2
        do 3
    end
end

很自然地想到,将多个para和subfunc放在array中,使用循环来逐个执行、简化代码。

funcs = [
    [para1, subfunc1],
    [para2, subfunc2]
    ]

但是,直接放的话,代码走到array定义的这行就报错了,因为要执行array中的函数!而这里的函数没有带参数。

2种解决的思路:

1)使用val

printdata = 'ZXPOTN(diag-shell-MPU-8/1/0)#exe diag_showsubneinfo()
diag_showsubneinfo()
[UEM]--------ActSubNeInfo---------------
[UEM]SubNeID       SubNeIP     NeShelfID
[UEM]  13133      0xc16e6e6e        8 
[UEM]-----------------------------------
[UEM]--------StationSubNeInfo-----------
[UEM]SubNeID       SubNeIP     NeShelfID
[UEM]  13133      0xc16e6e6e        8 
[UEM]-----------------------------------
[UEM]SetStation last Error: Download StID:1 SubNeID:13133 SubNeShelfID:8 SubNeIP:0xc16e6e6e
[UEM]
[UEM]last Error: rec act subne SubNeID:13133 SubNeShelfID:8,but has no station info, please create s
tation or top ne download!
[UEM]ZXPOTN(diag-shell-MPU-1/1/0)#exe diag_debug_printstate()
diag_debug_printstate()
[UEM]InitJobFlag :1
[UEM]MimLoadFlag :1
[UEM]CfgdbLoadFinish:0
[UEM]WasonServerType:0x700002c8
[UEM]Cph work mode:1
[UEM]value = 0 = 0x0(32);value = 16=0x10(64)
[UEM]
[UEM]ushell command finished
[UEM]start time: 2022-04-19  11:17:11(784493 s, 942 ms)
[UEM] end  time: 784493 s, 942 ms'

def handle_subneinfo(printdata)
	splitted = printdata.split(/\[UEM\]-----------------------------------|\[UEM\]SubNeID/)
	if splitted.length > 3
	  return (splitted[1]==splitted[3]) ? 'consistant' : 'inconsistant'
	else
	  return 'unknown'
	end
end

def handle_cphstate(printdata)
	mimLoadFlag = printdata.scan(/MimLoadFlag *: *(\d)/).flatten[0]
	wasonServerType = printdata.scan(/WasonServerType *: *(.+)/).flatten[0]
	return (mimLoadFlag=='0' or mimLoadFlag==nil or wasonServerType==nil or wasonServerType=='0' or wasonServerType =='0x0') ? 'abnormal' : 'normal'
end

uem_funcs = [
	['exe diag_showsubneinfo()','handle_subneinfo'],
	['exe diag_debug_printstate()','handle_cphstate']
]

uem_funcs.each do |item|
	p item[0]
	result = eval(item[1]+"(printdata)")
	p result
end

2)使用class

printdata = 'ZXPOTN(diag-shell-MPU-8/1/0)#exe diag_showsubneinfo()
diag_showsubneinfo()
[UEM]--------ActSubNeInfo---------------
[UEM]SubNeID       SubNeIP     NeShelfID
[UEM]  13133      0xc16e6e6e        8 
[UEM]-----------------------------------
[UEM]--------StationSubNeInfo-----------
[UEM]SubNeID       SubNeIP     NeShelfID
[UEM]  13133      0xc16e6e6e        8 
[UEM]-----------------------------------
[UEM]SetStation last Error: Download StID:1 SubNeID:13133 SubNeShelfID:8 SubNeIP:0xc16e6e6e
[UEM]
[UEM]last Error: rec act subne SubNeID:13133 SubNeShelfID:8,but has no station info, please create s
tation or top ne download!
[UEM]ZXPOTN(diag-shell-MPU-1/1/0)#exe diag_debug_printstate()
diag_debug_printstate()
[UEM]InitJobFlag :1
[UEM]MimLoadFlag :1
[UEM]CfgdbLoadFinish:0
[UEM]WasonServerType:0x700002c8
[UEM]Cph work mode:1
[UEM]value = 0 = 0x0(32);value = 16=0x10(64)
[UEM]
[UEM]ushell command finished
[UEM]start time: 2022-04-19  11:17:11(784493 s, 942 ms)
[UEM] end  time: 784493 s, 942 ms'

class Subneinfo
	def initialize(str1)
		@printdata=String(str1)
	end
	def result()
		splitted = @printdata.split(/\[UEM\]-----------------------------------|\[UEM\]SubNeID/)
		if splitted.length > 3
		  	return (splitted[1]==splitted[3]) ? 'consistant' : 'inconsistant'
		else
		  	return 'unknown'
		end
	end
end

class CphState
	def initialize(str1)
		@printdata=String(str1)
	end
	def result()
		mimLoadFlag = @printdata.scan(/MimLoadFlag *: *(\d)/).flatten[0]
		wasonServerType = @printdata.scan(/WasonServerType *: *(.+)/).flatten[0]
		return (mimLoadFlag=='0' or mimLoadFlag==nil or wasonServerType==nil or wasonServerType=='0' or wasonServerType =='0x0') ? 'abnormal' : 'normal'
	end
end

uem_funcs = [
	['exe diag_showsubneinfo()',Subneinfo],
	['exe diag_debug_printstate()',CphState]
]

uem_funcs.each do |item|
	p item[0]
	obj = item[1].new(printdata)
	p obj.result
end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值