• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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;

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;

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
系统管理员的Ruby发布时间:2022-07-13
下一篇:
Ruby快速入门(二):变量、数字、数组和运算符发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap