Ruby学习笔记(5) - 方法(Method)

  • 方法的名字后缀?表示这个方法是用来返回一个询问的结果的。后缀!(感叹号)是说明这个方法是会修改接受者的。
  • 在方法里面可以写一般的表达式。但是不可以定义instance method,class和module。
  • 方的参数可以有默认参数,就和C++里面一样。如果需要使用vararg这样的功能的话,就在最后的参数名前面加一个*,这样所以这个参数后面的参数都会转化成Array然后存放在这个参数里面。
def varargs(arg1, *rest)
"Got #{arg1} and #{rest.join(', ')}"
end
  • 如果要将一个code block以参数的形式传入,在最后的参数名前面加一个&,然后code block会转化成Proc对象,然后赋值给这个参数。
 class TaxCalculator
def initialize(name, &block)
@name, @block = name, block
end
def getTax(amount)
"#@name on #{amount} = #{ @block.call(amount) }"
end
end
  • 如果要Array逆向转化成个别的参数,那么就在Array的前面加一个*。这个操作和vararg的操作是相对应的。
def five(a, b, c, d, e)
"I was passed #{a} #{b} #{c} #{d} #{e}"
end
five(1, 2, 3, 4, 5 ) » "I was passed 1 2 3 4 5"
five(1, 2, 3, *['a', 'b']) » "I was passed 1 2 3 a b"
  • 如果方法的最后一个实参的前面加了&,那么这个参数会被提取出来,当成Proc对象转化成code block并与该方法关联起来。
  • Ruby的方法传参给hash传参提供了一个syntatic sugar,也就是在一般的参数后面,code block前面,添加key => value对,他会自动的将这个key: value 对收集并转化成一个hash table然后传递给最后一个arg。
class SongList
def createSearch(name, params)
# ...
end
end

# 下面的genre和durationLessThan会变成hash table并传给params。
aList.createSearch("short jazz songs",
'genre' => "jazz",
'durationLessThan' => 270
)
if times =~ /^t/
calc = proc { |n| n*number } # 这里的proc应该是一个函数,他将后面的code block转化成了一个Proc对象并返回。
else
calc = proc { |n| n+number }
end
puts((1..10).collect(&calc).join(", "))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值