需求:有多个函数需要顺序执行。
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