不带循环迭代器的枚举

本文关键字:枚举 迭代器 循环 | 更新日期: 2023-09-27 17:56:49

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

10.times { 
    # do this block 10 times
}

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

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

但这利用了循环迭代器,i .在基于 C 的语言(包括标签中列出的语言)中,有没有办法在不使用迭代器的情况下多次执行代码块?
例如:如果我想执行一个块一定次数,但不关心我在哪个迭代。

不带循环迭代器的枚举

不,这是不可能的。 之所以存在i是因为您需要跟踪已执行的迭代次数。即使是 Ruby 也必须在后台执行此操作,否则它怎么知道已经执行了多少次迭代?

它实际上只是语法的差异。Ruby 对你隐藏了它,而 C 衍生物没有。

在 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(() => { ... });