5.downto(1) {|x| p x}
5.step(1,-1){|x| p x}
或者写成如下这种形式:
5.downto(1) do |x|
p x
end
5.step(1,-1) do |x|
p x
end
在Ruby中,我们如果需要调用 module 的话可以使用 extend 、 include 、 prepend ,但是这些关键字具体有哪些区别呢。
现在我们在 Person 类中使用 extend 关键字来调用模块,使用相关方法,并且打印出相关信息。
我们由 Person.introduce 和 Person.current_time 可以观察出来 extend 关键字的作用是为 Person 添加了2个类方法。
上面两个类调用的方法都报错了可以看出, include 和 extend 相反, include 是为类中添加的实例方法,而不是类方法。
prepend 和 include 同样都是为类中添加实例方法,但不同之处在于,引入模块后的方法链会有一点区别
我们先看看 include 的方法链
再看看 prepend 的
可以看出 FooModule 和 Person 的顺序有什么不同,那么具体不同体现在哪,接下来我们调用方法就可以看出区别了。
include
prepend
可以看到,如果使用 prepend 的话我们会优先去查找 FooModule 中的 introduce 方法(如果 FooModule 没有 introduce 方法话,会依次去祖先链的上一级去查找 introduce 方法),而 include 是优先在 Person 中去查找。
在 ruby 中,{|args| statements} 叫做 匿名函数,就是没有名字的小型函数。然后 each_byte 是一个方法,它接收一个可调用对象。有时候左花括号可以用 do 代替,有花括号用 end 代替,就是
do |args|
statements
end
这种形式。