ruby方法调用中的三只暗器

第一支暗器:可变长度的参数列表

def varargs(arg1, *rest)
"Got #{arg1} and #{rest.join(', ')}"
end

以上方法定义中,arg1是第一个参数,后面还可以接纳n(n>=0)个参数
那么,实参带星号又会怎样呢,实参居然可以带*?

def five(a, b, c, d, e)
"I was passed #{a} #{b} #{c} #{d} #{e}"
end
five(1,2,3,4,5)
five(1,2,*[3,4,5])
five(*(1..5).to_a)

实参带*,与形参带*恰好相反,它用于把数组打散

第二支暗器:关联block为Proc对象

def get_tax(name, &block)
"#{name}'s tax is #{block.call(500)}"
end

get_tax "trace" { |amount| amount*0.075 }

block也可以是方法的入参,在方法内call一个block。至于它具体可以干什么,各位就各显神通了。

第三支暗器:内部的yield

def take_block(arg1)
if block_given?
yield(arg1)
else
arg1
end
end

这个与第二个很相似……,我比较倾向用第二个,这个可能是牛人的遗物吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值