這個在上一篇文章中已經記錄,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。文檔