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}
这些写法太通俗了,神奇吧。。。。。。。
书中是这样介绍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}
这些写法太通俗了,神奇吧。。。。。。。