我是Ruby新手,有没有办法从Ruby函数中获取yield个值?如果是,怎么做?如果没有,我可以 Select 什么来编写惰性代码?

推荐答案

Ruby的yield关键字与同名的Python关键字有很大不同,所以不要被它搞混了.Ruby的yield关键字是用于调用与方法关联的块的语法糖.

最接近的类似功能是Ruby的枚举器类.例如,Python的类似功能:

def eternal_sequence():
  i = 0
  while True:
    yield i
    i += 1

这是:

def eternal_sequence
  Enumerator.new do |enum|
    i = 0
    while true
      enum.yield i # <- Notice that this is the yield method of the enumerator, not the yield keyword
      i +=1
    end
  end
end

还可以使用enum_for为现有枚举方法创建枚举数.例如,('a'..'z').enum_for(:each_with_index)为您提供了一个小写字母的枚举器,以及它们在字母表中的位置.使用标准的可枚举方法(如1.9中的each_with_index)可以免费获得这个结果,因此只需编写('a'..'z').each_with_index即可获得枚举数.

Ruby相关问答推荐

Regex:仅捕获Ruby中匹配的替代方案

Ruby;人;docs-使用\";?

为什么 rdoc 注释似乎以两个井号/井号符号开头?

令人惊讶的有效 Ruby 语法:% 无处不在

独立于 Rails 使用 HAML 文件中的布局

需要Ruby

在 Ruby 中,如何确定字符串是否不在数组中?

Ruby 哈希文字的顺序是否得到保证?

Ruby:如何判断字符是大写还是小写

Ruby 中的方法: objects与not?

如何在 ruby​​ net/http 中实现 cookie 支持?

如何删除Ruby中数组中满足条件的所有元素?

动态设置 Ruby 对象的属性

我可以使用 `else if` 而不是 `elsif` 吗?

Ruby,生成随机十六进制 colored颜色

Ruby:将字符串转换为日期

正则表达式,如何匹配多行?

将字符串与Ruby中的数字连接起来

为什么 Ruby setter 需要self .班级内的资格?

你可以在Ruby中使用分号吗?