在ruby中,为什么有些方法能够接收参数变量又能接收代码块呢?这是因为啊,这些方法有一种机制来传输这些代码块,运行完之后再返回。我们可以在一个方法中定义这样一种机制,用yield关键字就可以啦。
看一下这段代码:
def block_test
puts "We're in the method!"
puts "Yielding to the block..."
yield
puts "We're back in the method!"
end
block_test{puts "I'm yielding!"}
运行之后是这个样子的:
We're in the method!
Yielding to the block...
I'm yielding!//代码“注入”
We're back in the method!
==> nil
整体感觉就像是在一段代码中注入了一段代码的样子
当然,强大的ruby还允许你注入的代码得到一个参数变量,这样就就能做更多事情了#^_^#
def yield_name(name)
puts "In the method! Let's yield."
yield name
puts "Block complete! Back in the method."
end
# Now call the method with your name!
yield_name("Gonjay") {|myname| puts "My name is #{myname}."}
在yield_name方法运行到yield关键字的时候就传了一个name参数给你之前丢过去的代码块,然后被你代码块中的myname所接收,最后打印出来