加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在ruby中使用’for each’的“each”函数实现

发布时间:2020-12-17 01:52:25 所属栏目:百科 来源:网络整理
导读:我一直在学习 ruby并且有兴趣知道在数组类中如何实现’each’.我看到一个 documentation here,看起来这就是’每个’的写法; # within class Array...def each for each element yield(element) endend 我确实在ruby控制台中编写了上面的代码(没有注释#)(我使
我一直在学习 ruby并且有兴趣知道在数组类中如何实现’each’.我看到一个 documentation here,看起来这就是’每个’的写法;

# within class Array...
def each
  for each element
    yield(element)
  end
end

我确实在ruby控制台中编写了上面的代码(没有注释#)(我使用的是1.9.2)并且得到了这个语法错误

:SyntaxError: (irb):2: syntax error,unexpected tIDENTIFIER,expecting keyword_do or '{' or '('
(irb):5: syntax error,unexpected keyword_end,expecting $end

这是否由于数组类实现不完整而发生(即’元素’未定义或是因为其他原因?我还想知道’每个’和其他基本功能是如何实现的.任何对正确文档的引用/答案会有所帮助.让我知道这是否重复(我没有看到任何类似的问题).谢谢

解决方法

首先,你的for语句的语法是关闭的,它应该类似于元素中的元素,它几乎等同于elements.each {| element | …}除了它没有引入新的范围.事实上,对于使用每个实现,当您尝试在没有定义每个方法的方法上调用它时可以看到:

>> for element in nil
..   end
NoMethodError: undefined method `each' for nil:NilClass
    from (irb):1

关于你的语法错误:因为你正在重新打开一个类,当Ruby解析器看到它们各自使用self作为接收器时,它会将你的语句转换为self.each元素,其中element是提到的tIDENTIFIER,而像self这样的东西.each do | element | …结束本来应该是.

至于Array#each的实现,它在C中实现,看起来像这样

VALUE
rb_ary_each(VALUE array)
{
    long i;
    volatile VALUE ary = array;

    RETURN_ENUMERATOR(ary,0);
    for (i=0; i<RARRAY_LEN(ary); i++) {
        rb_yield(RARRAY_PTR(ary)[i]);
    }
    return ary;
}

这基本上是你在C中用Ruby编写的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读