没有循环迭代器的枚举

时间:2014-04-04 21:20:03

标签: c# c++ objective-c c

在红宝石中,我看到了以下内容。

10.times { 
    # do this block 10 times
}

有了这个,(据我所知,这与ruby相比并不多)没有循环迭代器。在基于C语言中,我能想出的最接近的副本是一个简单的for循环。

for (int i = 0; i < 10; i++) {
    // do this block 10 times
}

但这利用了循环迭代器i。基于C语言(包括标签中列出的语言)是否有任何方法可以多次执行代码块而无需使用迭代器?
例如:如果我想执行一个块一定次数,但不关心我在哪个迭代。

2 个答案:

答案 0 :(得分:3)

不,这是不可能的。存在i因为您需要跟踪已执行的迭代次数。甚至Ruby也必须在幕后做这件事,否则它怎么知道已执行了多少次迭代?

所有这一切都是语法上的差异。 Ruby隐藏了它,而C衍生产品则没有。

答案 1 :(得分:1)

在Ruby中,所有类型(包括整数)本质上都是复杂类型,而在其他语言中常见的是整数是普通的原始类型。例如,在C#中,尽管我认为我不想这样做,但如果目标纯粹是模仿Ruby语法那么......

int

上定义扩展方法
public static class Helpers
{
    public static void Times(this int value, Action action)
    {
        for (int i = 0; i < value; i++)
        {
            action.Invoke();
        }
    }
}

做点什么......

10.Times(() => { ... });