Ruby 之 Block, Proc, LambdaBlockBlock 不是對象,是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]。
ProcProc 是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]。
LambdaLambda 是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 導致 匿名函式結束,並返回調用lamdad的函數(Proc和Block都是從定義的它們的函數放回)
Block,Proc,Lambda的區別總結
- Block 中 用next從自身返回,用break從調用它的函數中返回, 用 returnc從定義它的函數中返回;
- Proc 是對Block的物件導向封裝,不支援breaky用法 ;
- lambda是對Proc的封裝, Lambda中return等同於next;
BlockBlock 不是對象,是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]。
ProcProc 是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]。
LambdaLambda 是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 導致 匿名函式結束,並返回調用lamdad的函數(Proc和Block都是從定義的它們的函數放回)
Block,Proc,Lambda的區別總結
- Block 中 用next從自身返回,用break從調用它的函數中返回, 用 returnc從定義它的函數中返回;
- Proc 是對Block的物件導向封裝,不支援breaky用法 ;
- lambda是對Proc的封裝, Lambda中return等同於next;