zoukankan      html  css  js  c++  java
  • Enumerator yielder.yield 与 Proc.yield 区别

    最近看ruby cookbook遇到这个用法,google一下,这里原文解释

    http://stackoverflow.com/questions/18865860/enumerator-yielder-yield-vs-proc-yield

    Enumerator yielder.yield VS Proc.yield

    The yield statement has no receiver. Inside a method it means "Run the block right now". An error occurs if no block is attached. It is not always given an argument, because sometimes you just want to run the block.

    就是说。有时候未必会传递一个block。仅仅是想运行一个block。但是未必会传递这个block,这时yielder.yield派上用场

    例如

    def foo
    yield :bar
    end
    foo # LocalJumpError
    foo { |x| puts x } # bar

    Enumerator::Yielder
    For a yielder, yield is almost always given an argument. That's because it means the same as << which is "The next time someone calls next on me, give them this value".

    yield总是会得到一个参数, 因为<<和yield一样意思,下一次在我身上调用next方法,返回这个值

    Enumerator.new { |yielder| yielder.yield 3 }.next # 3 #返回3
    Enumerator.new { |yielder| yielder << 3 }.next # same thing

    Proc
    Procs and lambdas are basically functions. yield here means the same thing as call, which "Just call the function". You can give it an argument or not, depending on how the proc was defined. Nothing fancy here.

    procs和lambda类似函数,yield和call作用一样,调用这个函数 你可以传递或者不传递参数,这个传不传按照proc怎么定义来看,
    proc { |x| puts x }.yield(:bar) # bar
    proc { |x| puts.x }.call(:bar) # same thing

  • 相关阅读:
    (CSDN迁移)js中的判空
    (CSDN迁移) 输入一个链表,从尾到头打印链表每个节点的值
    (CSDN迁移) 替换字符串中的空格
    (CSDN迁移) Java路径获取
    Apache JMeter 做接口并发测试
    用Postman做接口测试
    高并发或高负载下的系统设计
    编译时异常与运行时异常的区别
    使用JUNIT进行单元测试
    hexo 博客如何更换电脑
  • 原文地址:https://www.cnblogs.com/or2-/p/5116524.html
Copyright © 2011-2022 走看看