ruby块和可变参数的使用

假设有以下两个方法需要使用数据库

def add(var1,var2,str)
  "add方法使用数据库"
end

def count(var)
  "count方法使用数据库"
end

为了方便统一配置,我们用一个hook函数配置数据库信息,之后调用hook函数就自动在执行以上方法前配置好数据库了

def before_execute_function_add(var1,var2,str)
  puts "连接数据库"    # 假设这部分是必须内容
  puts "各种配置和预处理"
  add(var1,var2,str)
end

def before_execute_function_count(var)
  puts "连接数据库"   # 假设这部分是必须内容
  puts "各种配置和预处理"
  count(var)
end
# 可以发现这种写法很重复。
# 如果有更多的方法,是不是每个都这样配置呢?显然这里不能简单地重载方法,因为内部方法名都改了。
before_execute_function_add(2,3,"abc")
before_execute_function_count(2)

在ruby中,可以使用可变长度参数和块来实现这个功能的简化:

def before_execute_function(*var)
  puts "连接数据库"   # 假设这部分是必须内容
  puts "各种配置和预处理"
  yield(*var)
end
# *[参数]表示这里的参数数量是可变的
# yield这里会执行后面传进来的块
before_execute_function(2){|var| count(var)}
before_execute_function(2,3,"abc"){|var1,var2,var3| add(var1,var2,var3)}
# 上下两种方式是等价的,但是下面一种只需要一个hook函数,
#而且之后就算有再多的方法需要用掉这个hook函数都只需要在调用时自定义块就好了,相比上面的实现方式代码简洁多了。也更加符合元编程的思想。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值