ruby中yield的使用和理解

通过解析Ruby代码实例,深入理解yield在迭代器中的应用与含义,包括参数传递与多态性使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<span style="font-family: Tahoma; text-align: -webkit-auto; background-color: rgb(255, 255, 255);">之前一直搞不清楚yield的用法和含义,看了很多资料都说的不清不楚</span>
今天看了一些ruby中自己实现迭代器的代码,突然发现貌似懂了yield的含义了
yield 相当于是一个占位符,后面跟的是这个占位符的参数。
在调用的时候再用do...end块把内容附上就是了

举个栗子:
x = [4,3,1,5,2]

class Array
  def myeach
    for i in self do
      yield i
    end
  end

  def mysum
    sum = 0
    for i in self do
      puts 'hello'
      sum += i
      yield sum, i
    end
  end
end

x.myeach do |i|
  puts i
end

puts "\n\n"

x.mysum do |sum, i|
  puts sum
  puts i.to_s + "\n\n"
end

puts "\n\n"

x.mysum do |a|
  puts a
end

puts "\n\n"

x.mysum do |a,b,c|
  puts a
  puts c.nil?.to_s + "\n\n"
end


这段代码的运行结果是:
4
3
1
5
2


hello
4
4

hello
7
3

hello
8
1

hello
13
5

hello
15
2



hello
4

hello
7

hello
8

hello
13

hello
15



hello
4
true

hello
7
true

hello
8
true

hello
13
true

hello
15
true



从上面的例子可以看到,在外部定义替换yield的代码段的时候,设置接受参数的数量可以大于或者小于yield传的,小于的时候就优先接收yield后列出的靠前的。多的时候后面的都是nil
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值