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

ruby method lambda block proc 联系与区别 --- next break return

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

$res = "__"

def lamb(&lamb)

3.times do
puts $res
=lamb.call
end
puts
"-------at the end of lamb() : #{$res}"
end

def lamb_test
lamb {
return puts " return in lamb() " }
puts
"--------at the lamb_test() end"
end


def bl
3.times do
puts $res
= yield
end
puts
" ------at the end of bl() :#{$res}"
end

def bl_test
bl do
return puts "use return in bl()" end
puts
"-----at the end of test_test()"
end


def p(&pro)
3.times do
puts $res
= pro.call
end
puts
"-----at the end of p() : #{$res}"
end

def p_test
p do
return puts "use return in p() of p_test()" end
puts
"-----at the end of p_test()"
end



puts
"-------------lambda----------"
nextt
= lambda{ next "next in lamb()"; puts "behind next" }
breakk
= lambda{ break "break in in lamb()";puts "behind break" }
ret
= lambda{ break "return in in lamb()";puts "behind return" }
lamb(
&nextt)
lamb(
&breakk)
lamb(
&ret)
lamb_test


puts
"\n----------------block--------"
bl { next
"next in bl()" ; puts "behind next" }
bl {
break "break in bl() " ;puts "behind break" }
#bl { return "return in bl() " ;puts "behind return" }
bl_test

puts
"\n-----------proc------------"
ne
= Proc.new { next "next in p() "; puts "behind next" }
br
= Proc.new { break "break in p() " ;puts "behind break" }
#retu = Proc.new { return "return in p() " ;puts "behind return" }
p(&ne)
#p(&br)
#
p(&retu)
p_test

  

 

运行结果:

-------------lambda----------

next  in lamb()

next  in lamb()

next  in lamb()

-------at the end of lamb() : next  in lamb()

break in in lamb()

break in in lamb()

break in in lamb()

-------at the end of lamb() : break in in lamb()

return in in lamb()

return in in lamb()

return in in lamb()

-------at the end of lamb() : return in in lamb()

 return in lamb() 

----------------block--------

next in  bl()

next in  bl()

next in  bl()

 ------at the end of bl() :next in  bl()

use return in bl()

-----------proc------------

next in p() 

next in p() 

next in p() 

-----at the end of  p() : next in p() 

use return in p() of p_test()

解释下

Method :方法

lambda:匿名方法

block:代码段

proc:有名block

Method:普通函数

lambda:匿名函数,内部的return 不会 退出上级 的代码。

block:无名代码片段,内部的return 会 退出上级代码。

proc:具名(有名)代码片段,内部的return 会 退出上级代码。

内部关键字:

next   break   和   return 的区别

lambda表达式中 next :返回给调用它的函数,不会退出调用它的函数。

lambda表达式中 break:与next没差别好像

lambda表达式中 return :与next没差别好像

block表达式中 next : 

block表达式中 break: 

block表达式中 return :退出调用它的函数

proc表达式中 next :返回给调用它的函数。

proc表达式中 break:与next没差别好像

proc表达式中 return :


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

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

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

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