Ruby 之 Block, Proc, Lambda 联系--区别,转载
Ruby 之 Block, Proc, Lambda
Block
Block 不是對象,是Ruby的語言特性,近似于閉包(Closure)。
范例:
def meth?
? res=? yield
? "Block called returns #{res}"
end
puts? meth?do next “next_value” end??? #Block called returns next_value
puts? meth?do break “break_value” end?? # break_vcowcuo錯誤哦alue
def my
? meth?do return “reutnr_value” end
end
puts my ()????? # return_value
紅色部分就是 Block.
block 之 next
block中的 next [value] 導致 block結束,并返回[value]給調用函數。
block 之 break
block中的 break [value] 導致 block結束,并導致調用block的函數也返回,返回值是[value]。
block 之 return
block中的 return [value] 導致 block結束,并導致定義block的函數返回,返回值是[value]。
?
Proc
Proc 是Ruby 對 block的面向對象的封裝。
范例:
def meth (&proc)
? res=? proc.call
? "Proc called returns #{res}"
end
puts? meth?do next “next_value” end??? #Proc called returns next_value
puts eth?do break “break_value” end?? # 出錯
def my
? meth?do return “reutnr_value” end
end
puts my ()????? # return_value
紅色部分就是 Proc.
Proc 之 next
Proc中的 next [value] 導致 Proc結束,并返回[value]給調用函數。
block 之 break
Proc中不能使用break,這回導致異常。
block 之 return
Proc中的 return [value] 導致 Proc結束,并導致定義Proc的函數返回,返回值是[value]。
?
Lambda
Lambda 是Ruby 對 Proc進一步的封裝。
范例:
def meth (&proc)
? res=? proc.call
? "Lambda called returns #{res}"
end
def my
? meth (&lambda do return “reutnr_value” end)
end
puts my ()????? # Lambda called returns return_value
紅色部分就是 Lambda.
Lambda 和 Proc的區別就在 Lambda中的 return 導致 lambda 函數結束,并返回調用lamdad的函數(Proc和Block都是從定義的它們的函數放回)
?
Block,Proc,Lambda的區別總結
- Block 中 用next從自身返回,用break從調用它的函數中返回, 用 returnc從定義它的函數中返回;
- Proc 是對Block的面向對象封裝,不支持breaky用法 ;
- lambda是對Proc的封裝, Lambda中return等同于next;
轉載于:https://www.cnblogs.com/ToDoToTry/archive/2011/08/14/2137897.html
總結
以上是生活随笔為你收集整理的Ruby 之 Block, Proc, Lambda 联系--区别,转载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个qq韩语网名
- 下一篇: 用PHP生成等比图像的方法