例如,Ada中的类似内容(如果要支持它的话):
type Type_Name is range bottom .. top;
其中"底部"one_answers"顶部"是变量。
或者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
这样的东西是否存在。
哦,也许我应该重述一下标题中的问题:有没有静态类型语言的类型是在运行时决定的?如果是,它们是什么?
顺便说一句,也许这意味着该语言不会是静态类型的。但我指的是在使用之前必须声明变量类型的语言(当然,否则就不能这样做)。
在运行时决定类型的静态类型语言没有什么意义。静态类型的目的是静态地检测所有类型错误,也就是说,在编译时。
如果要在运行时决定类型,那么不妨放弃"类型"的概念,而使用鸭子类型方法,其中重要的是是否支持操作。
拥有一种在运行时决定类型的静态类型化语言的唯一原因是处理编译时无法决定的情况。可能有一些语言是这样的,但我真的不再关注语言开发场景了,所以我不能告诉你。
您可以在静态类型语言中模拟动态使用。当然会有一些限制,但你可以做到
一些例子:
在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();
有效。