这个在上一篇文章中已经记录,Block其实就是Procedure,只是没有变量指向它不可复用。react
def show_type(&obj) puts obj.class end show_type {} # => Proc
Ruby经过如下方式支持lambda方式:ruby
def lambda_call(lam) lam.call end lambda_call lambda{puts "lambda"}
Ruby 还能够直接调用method对象:code
def generic_return(block) block.call end def method_demo puts "method" end generic_return method(:method_demo) # =》 method
Lambda和Method的执行是方法栈的调用,而Block或Proc实际行为是相似于迁入代码中的一个代码块,以下:对象
def generic_return(block) block.call puts "end" end def method_demo puts "method" end generic_return method(:method_demo) generic_return lambda{puts "lambda"; return nil} generic_return Proc.new {return "Proc.new"} # => method # => end # => lambda # => end # => unexpected return (LocalJumpError) 报错了
symbol和String有不少类似之处,二者之间能够方便的转换:ip
:symbol.to_s "symbol".intern # => "symbol" # => :symbol
使用symbol的缘由存在如下几点:内存
另外能够经过Symbol.all_symbols方法得到当前所有的symbol。文档