1

Java では、いくつかの標準ライブラリ メソッド (実際にはメソッドではないのでしょうか?) の形式は次のとおりです。

keyword(condition or statements) {
//write your code here
}

これには、if ステートメント、for ループ、while ループ do-while ループなどが含まれます。

for(initialValue = n; conditionForLoopToContinue; incrementOrDecrement) {
//write your code
}

また、次のように匿名スレッドを開始することもできます。

new Thread() {
//write your code here
}.start();

私が知りたいのは、この中括弧形式を持つ独自のメソッド (または実際に呼び出されたもの) を作成できるかということです。

したがって、たとえば、次のような「until」メソッドを記述します。

int a = 0;
until(a == 10) {
a++;
}

until(a == 10) は while(a != 10) と同等です。

もちろん、上記の例では新しいことはできません (while ループを使用するだけです) が、この質問の目的は、「カスタム中かっこメソッド」を記述できるかどうかを調べることです。

また、この機能またはそれに類似した機能を持つ言語を知っている場合は、お知らせください。

事前に助けてくれてありがとう!

4

3 に答える 3

2

独自のキーワードを実装することはできません。もちろん、独自のクラスの匿名サブクラスを作成できます。つまり、次のことができます。

new YourOwnClass() {
    // write your code here
}.launch();

もし良かったら。

Java 8 では、要求している中かっこの構文にもう少し近づくことができます。utilラムダを使用してメソッドを模倣する私の試みは次のとおりです。

public class Scratch {

    static int a;

    public static void until(Supplier<Boolean> condition, Runnable code) {
        while (!condition.get())
            code.run();
    }

    public static void main(String[] args) {
        a = 0;
        until(() -> a == 10, () -> {
            System.out.println(a);
            a++;
        });
    }
}

出力:

0
1
2
3
4
5
6
7
8
9

この少し不自然な例には、いくつかの制限があることに注意してください。a たとえば、クロージャーのためにフィールドまたは定数変数である必要があります。

于 2014-12-11T10:03:37.337 に答える
0

つまり、新しい「予約語」を発明し、この予約語の後にブール式とステートメント (ブロック) が続く必要があると言っています。

新しい予約語が必要であるという事実だけでも、多くの問題を引き起こす可能性がありuntilます。たとえば、変数などのコンテキストで、今日すでにその単語を使用している可能性があります。あなたの新しい機能はそのコードを壊します。

また、ランタイム環境に新しいステートメントの効果を伝える必要があります。

簡単にそれができる言語を私は知りません。@aioobeが言ったように、ラムダはそれに近いものかもしれません。

于 2014-12-11T10:07:31.577 に答える