是否存在静态数据类型可选的编程语言?

时间:2009-11-05 03:39:00

标签: language-agnostic programming-languages

我正在考虑以下两个是等价的东西:

 int [] array = { 1,2,3,4 }
 foreach( int i in array ) {
    print i 
 }


 array = { 1,2,3,4 }
 foreach( i in array ) {
     print i 
 }

10 个答案:

答案 0 :(得分:9)

是的,type inference以这种方式工作的语言。代码是静态类型的,但编译器可以知道如果你编写{ 1,2,3,4 },那么你为其分配或调用的任何东西都是int[]类型。它节省了很多(手指)打字。

答案 1 :(得分:5)

C#允许您在声明中使用var关键字来推断分配右侧的类型。

答案 2 :(得分:3)

您可以在C ++ 0x中执行此操作,但类型不是array

auto numbers = {1, 2, 3, 4}; // initializer list
for(int i : numbers)
{
  cout << i;
}

答案 3 :(得分:1)

在BASIC的某些版本中,常量的类型由其值确定。

CONST X = 1 ''integer
CONST PI = 3.14 ''float
CONST S = "Hello World" ''string

答案 4 :(得分:1)

python的工作方式与此类似。

答案 5 :(得分:1)

Lua中只有一种数字类型。

array = { 1,2,3,4 }
for i,v in ipairs(array) do
  print(v)
end

答案 6 :(得分:1)

甚至可以在Powerbuilder(PB.NET)中使用:

integer a[] = {1,2,3}
...
a = { 3,2,1 }

答案 7 :(得分:1)

C#3.0也有这个。例如:

var s = "hello world";

编译如下:

string s = "hello world";

也适用于其他数据类型,仅举例说明。

类型推理松散类型的语言之间存在差异,BTW。使用类型推断时,仍然存在强类型,因此一旦通过初始化建立了类型,就无法更改它并且执行方式与明确指定类型时一样。然而,松散类型的语言(如VBA中的“Variant”类型)允许在运行时将相同的变量设置为不同类型的值。

答案 8 :(得分:1)

F#,CAML / OCAML,Haskell和Boo的类型推断通常与您所描述的类似。与此示例相比,函数式语言往往具有更强大的类型推断。

答案 9 :(得分:0)

您也可以使用templates in C++执行此操作。 Perl 6也可以在其各种内置数据类型上执行此操作。