日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Ruby 之 Block, Proc, Lambda 联系--区别,转载

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 联系--区别,转载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。