<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