您将如何在 Ruby 中简洁地编写这段 C# 代码(使用yield 关键字)?
有没有好方法在 Ruby 中模拟 yield
?我有兴趣用 Ruby 编写类似的“无限 fib 序列”。
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
namespace cs2 {
class Program {
static void Main(string[] args) {
var i=Fibs().TakeWhile(x=>x < 1000).Where(x=>x % 2==0).Sum();
}
static IEnumerable<long> Fibs() {
long a = 0, b = 1;
while (true) {
yield return b;
b += a;
a = b - a;
}
}
}
}
如果可以的话请举个例子。
Is there a good way to emulate yield
in Ruby? I'm interested in writing similar 'infinite fib sequence' in Ruby.
Here is the code:
using System;
using System.Collections.Generic;
using System.Linq;
namespace cs2 {
class Program {
static void Main(string[] args) {
var i=Fibs().TakeWhile(x=>x < 1000).Where(x=>x % 2==0).Sum();
}
static IEnumerable<long> Fibs() {
long a = 0, b = 1;
while (true) {
yield return b;
b += a;
a = b - a;
}
}
}
}
If it is possible, please give an example.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
ruby 中实现此类序列的常见习惯用法是定义一个方法,如果给定了序列中的每个元素,则该方法执行一个块;如果没有,则返回一个枚举器。那看起来像这样:
The common idiom in ruby to implement such sequences, is to define a method that executes a block for each element in the sequence if one is given or return an enumerator if it is not. That would look like this:
带有 Ruby 1.9 Fibers 的斐波那契数 :
Fibonacci numbers with Ruby 1.9 Fibers: