ruby中的block和迭代器

来源:互联网 发布:抢购软件源代码 编辑:程序博客网 时间:2024/05/19 19:41
10.Block代码块
   书中是这样介绍Block的:
   (1)先来看看Block的写法:只是{}或者do...end之间的一组代码块
   {puts "Hello"}
   do
    club.enroll(person)
    person.socialize
   end
   为什么会有这两钟写法呢:{}比do...end更紧密些
   但是ruby程序员正在尝试ruby约定俗成的标准:
   单行block用{}          多行用do...end
   (2)下面写一个方法
   ==================start==================
   def call_block
        puts "Start of method"
        yield
        yield
        puts "End of method"
    end
    call_block { puts "In the block"}
    ==================end==================
    {puts "In the block"} 是一段block
    Ruby使用yield语句执行block语句,这里调用两次
    可以提供参数给yield("hello",77)
    def call_block_2
     yield("hello",77)
    end
    call_block_2 {|str,num| puts str,num}
    (3)block的作用,用在迭代器中
    还记得循环中each的用法吗
    a = %w{ant bee cat dog elk}
    a.each{|lang|
        puts lang
    }
    我们来解释一下,相当于在def each中调用了多次的yield("ant")
    
    许多内建在c和java等语言的循环结构在ruby中只是方法的调用,
    这些方法会零次或多次的调用相关联的block
    下面给些例子,你就会明白了
    ["cat","dog","horse"].each{|name| print name," "}
    5.times{print "*"}
    3.upto(6){|i| print i}
    ('a'..'e').each{|char|print char}
    这些写法太通俗了,神奇吧。。。。。。。

原创粉丝点击