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 回答