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。