0

たとえば、Ada では次のようになります (これをサポートする場合):

type Type_Name is range bottom .. top;

ここで、「下」と「上」は変数です。

またはCで次のようなもの(これをサポートする場合):

struct s {
    int a;
    if (z<3) {
        char b;
        int c;
    } else {
        struct ss {
            int b;
            char c;
        }
    }
} v;

または、 c が宣言の変数識別子の後に型を持つ場合:

var if (z<3) int else char;

またはそのようなもの。

これはただの好奇心からです。役に立つかどうかもわかりませんs.ss.bし、使用する前にそのようなものが存在するかどうかを確認する必要があるなど、多くの問題が発生することもわかっています。

ああ、おそらくタイトルからの質問を言い換える必要があります: 実行時に型が決定される静的に型付けされた言語はありますか? もしそうなら、それらは何ですか?

ところで、おそらくこれは、言語が静的に型付けされないことを意味します。しかし、変数の型を使用する前に宣言する必要がある言語を意味します (もちろん、そうでなければこれを行うことはできません)。

4

2 に答える 2

1

実行時に型を決定する静的型付け言語にはほとんど意味がありません。静的型付けのポイントは、すべての型エラーを静的に、つまりコンパイル時に検出することです。

実行時に型を決定する場合は、「型」の概念自体を破棄し、操作がサポートされているかどうかが重要なダックタイピングアプローチを使用することもできます。

実行時に型を決定する静的型付け言語を使用する唯一の理由は、コンパイル時に決定不可能なケースに対処するためです。こういう言語もあると思いますが、言語開発のシーンはもう気にしないのでお話しできません。

于 2012-07-20T19:01:13.557 に答える
0

静的に型付けされた言語で動的な使用法をエミュレートできます。もちろん多少の制限はありますが、あなたはそれを行うことができます

いくつかの例:

c# では、次のコードが有効です。

object variant;

if(a<5)
     variant = new int();
else
     variant = new double();

そしてC ++で

boost::variant< std::vector<int> , std::list<int> > v;

if (n > 10000)
   v=std::vector();
else
   v=std::list();

有効です。

于 2013-04-08T07:38:51.423 に答える