Перечисление без итератора цикла

0

В рубине я видел следующее.

10.times { 
    # do this block 10 times
}

При этом (насколько я знаю, что не очень похоже на рубин), нет итератора цикла. В языках на языке C самая близкая реплика, которую я могу придумать, - это простой цикл.

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

Но это использует итератор цикла, i Есть ли какой-либо способ на языках C (включая те, которые указаны в тегах) для выполнения блока кода несколько раз без использования итератора?
Например: Если бы я хотел выполнить блок определенное количество раз, но мне все равно, какая итерация включена.

  • 3
    Вы неправильно понимаете значение слова «итератор».
  • 1
    Вы можете использовать макрос для повторения любого кода любое количество раз, известное во время предварительной обработки. Иногда это необходимо, и, насколько я помню, библиотека препроцессора Boost предлагает эту функциональность. Но почему ты этого хочешь?
Показать ещё 3 комментария
Теги:

2 ответа

3
Лучший ответ

Нет, это невозможно. i существует, потому что вам нужно отслеживать, сколько итераций вы выполнили. Даже Руби должен делать это под капотом, иначе как он узнает, сколько итераций было выполнено?

На самом деле это разница в синтаксисе. Ruby скрывает его от вас, где в качестве производных C нет.

1

В Ruby все типы (включая целые) являются, по существу, сложными типами, в то время как на других языках распространено множество целых чисел простых простых примитивных типов. В С#, например, насколько я не думаю, что когда-либо захочу это сделать, но если цель состоит в том, чтобы имитировать синтаксис 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(() => { ... });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню