2

「for ループ」スタイルの構文で関数を作成することは可能ですか? もしそうなら、そのスタイルの関数は何と呼ばれるでしょうか?

たとえば、for ループは次の構文に従います。

for(i = 0; i < 10; i++)
{
    //do something
}

たとえば、次のように呼び出すことができる「myFunction」と呼ばれる独自の関数を作成することは、任意の言語で可能ですか。

myFunction(x; y; z)
{
   //do something
}

(関数入力とブロック ラッパーのカンマの代わりにセミコロンに注意してください)

通常、プログラミング言語では、関数を作成して次のように呼び出すことしかできません。

myFunction(input1, input2, input2);

したがって、基本的には、for ループと同じように、セミコロンとコード ブロックで区切られた入力を受け入れる関数を作成できるようにしたいと考えています。これは可能ですか?これは何と呼ばれていますか?

編集 - 明確化:ループを実行するショートカット関数を書くつもりはありません。私は、構文の観点から for ループのように見える、作成された関数を作成しようとしています。ただし、作成された関数が「for」または何らかの理由で呼び出されることはありません。

編集 -これを「コンパイラ」レベルで実装することは可能でしょうか? JavaScript で最も近いものは次のようになることを理解しています (ただし、for ほどきれいではありません)。

myFunction(x, y, z, function()
{
    //do something
});
4

5 に答える 5

3

ええと...すでに言ったように、独自のメソッドを作成できますが、キーワードを作成することはできません。forはそのようなキーワードであり、キーワードはメソッドが行う通常のルールに準拠する必要はありません。

私が考えることができる最も近いものはこれです:

void MyForLoop<T>(Func<T> myInitialization, Func<T, bool> myCondition, Func<T, T> myIteration, Action<T> myBody)
{
   // Check the arguments for null's.
    T iterator = myInitialization();
    while(myCondition(iterator))
    {
         myBody(value);
         value = myIteration(value);
    }
}

次のように呼び出すことができます。

MyForLoop(() => 0, i => i < 10, i => i + 1, i => Console.WriteLine(i));
于 2013-05-01T15:04:10.557 に答える
0

あなたの正確な構文は JavaScript では不可能ですが、あなたが望むものの意図はそうです。必要なものは、最新のブラウザーでforEach提供されるものと非常に似ています。Array

function myLooper(iterations, callback) {
    for(var i = 0; i < iterations; ++i) {
        callback(i);
    }
}

myLooper(4, function(i) {
    console.log(i);
});

// outputs
// 0
// 1
// 2
// 3

これは上記のフィドルです。

また、これに C# のタグを付けたので、ここに C# バージョンがあります。

void MyLooper(int iterations, Action<int> action) {
    for(int i = 0; i < iterations; ++i) {
        action.Invoke(i);
    }
 }

現在手元に C# 環境がないため、上記の内容は正しくない可能性があります。

于 2013-05-01T15:06:44.910 に答える
0

関数がセミコロンで区切られた入力を受け入れるようにしたい場合は、入力をセミコロンで区切られた 1 つの文字列に結合しないでください! これが理にかなっている場合は、すべての入力を配列に入れて、配列に対して a を実行し.join(';')ます。または、セミコロンが特定の要件でない場合は、配列自体を渡します。

于 2013-10-01T11:21:21.697 に答える