Ruby c==self和yield做什么?
你能帮助我了解这个课程的功能以及我们如何利用它吗Ruby c==self和yield做什么?,ruby,Ruby,你能帮助我了解这个课程的功能以及我们如何利用它吗 class Integer def myt c=0 until c == self yield(c) c+=1 end self end end 多谢各位 x = Integer.new x.myt 我试着测试它,但不起作用。错误是:没有给定的块产量 此外,在我的书中,它说要像这样进行测试: 5.myt | |使我处
class Integer
def myt
c=0
until c == self
yield(c)
c+=1
end
self
end
end
多谢各位
x = Integer.new
x.myt
我试着测试它,但不起作用。错误是:没有给定的块产量
此外,在我的书中,它说要像这样进行测试:
5.myt | |使我处于迭代{I}!}但它也给出了一个错误——不确定这行代码的含义 看起来它以包含方式和自排他方式枚举零之间的值
allon@ahadaya:~$ irb
irb(main):001:0> class Integer
irb(main):002:1> def myt
irb(main):003:2> c=0
irb(main):004:2> until c == self
irb(main):005:3> yield(c)
irb(main):006:3> c+=1
irb(main):007:3> end
irb(main):008:2> self
irb(main):009:2> end
irb(main):010:1> end
=> nil
irb(main):011:0> 5.myt { |i| puts i }
0
1
2
3
4
=> 5
irb(main):012:0>
该方法似乎是一个times实现
基本上,5.5倍{i| puts i}和5.myt{i|puts i}会做完全相同的事情
首先,它将计数器设置为0,c=0。然后有一个条件,它检查c是否等于self,self始终是附加到方法myt的整数。然后,它生成计数器并在完成时返回self。allonhadaya和PNY很好地解释了myt方法的目的枚举 关于标题中提到的两个问题: 一,。‘c==self’做什么 “==”运算符检查实例化的整数c和整数对象的值是否相等。如果是,则表达式的计算结果为true 二,。“收益”是做什么的
“yield”语句将控制从当前方法传递到已提供给该方法的块。Blocks是ruby对闭包的实现,简单地说,这意味着只要方法支持block,就可以通过调用一个附加代码块来扩展该方法。使用您的书中给出的示例,将yield语句合并在一起
5.myt {|i| puts "I'm on iteration #{i}! "}
#You were missing an object in the pipes and a curly bracket before the pipes (not parentheses)
允许您查看myt方法的内部工作。初始化值为0的变量c时,该方法将执行直到查找,直到满足条件c==self为止。Self引用对象,这里是5,方法作用于该对象
因此
def myt
until c == 5 #Until this is true
yield(c) #Do this .. here yield will do whatever the block specified
c+=1 #Increment on each iteration the value of variable c by 1
end #closing the until loop
self #return self
end
方法中的收益将控制权从方法传递给参数(一个块)并返回给方法
因此,Yield允许您构建具有类似模式的方法,但通过block,您可以自定义它以满足特定需要
如果不是把每个数字都放进去,也许你只想把奇数放在0和你调用方法的整数之间-
5.myt {|i| puts i if i.odd?} # returns I am odd: 1 and I am odd: 3
我建议您在这里编写自己的模块,看看收益率是如何工作的,以及如何保持相同的方法,但传入不同的模块并创建不同的方法输出 在| |之间缺少一个i。