论坛首页 编程语言技术论坛

提问关于yield的详细用法

浏览 4567 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-11  
初学ruby看到关于yield的使用
突然有点迷茫
def xxx
  puts "starement begin"
  yield
  yield
  puts"statement ending"
end

xxx {puts"now..."}

produces:
starement begin
now...
now...
statement ending

如果只是插入一段代码的话
直接另外写一个函数即可
为什么还要这么用
是不是多此一举的?
迷惑中
   发表时间:2007-04-11  
yield是可以處理Block中的東西
像是你看到的Iterators事實上也是會用到yield
個人認為yield不好懂=_=
是我比較笨嗎?
0 请登录后投票
   发表时间:2007-04-12  
block的作用基本上就是个callback函数,没必要想的太多了。
和command pattern,c 的函数指针,c++ 的functor的目的基本一致。

当然细致说来和其他语言的类似概念有些区别(比如local variable的scope等),但简单理解成callback函数大致方向就对了。
0 请登录后投票
   发表时间:2007-04-12  
def xxx
  puts "starement begin"
  yield
  yield
  puts"statement ending"
end

xxx {puts"now..."}

改成这样:
def xxx &block
  puts "starement begin"
  block.call
  block.call
  puts"statement ending"
end

xxx {puts"now..."}


这样是不是清晰了点?
0 请登录后投票
   发表时间:2007-04-12  
block类似callback方式调用.
是ruby中实现内置迭代器基本方式
另外的好处还扩展了函数沿展性,没有必要每一个代码段调用都处理为一个函数.
0 请登录后投票
   发表时间:2007-04-12  
明白了 谢谢
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics