我正在考虑以下两个是等价的东西:
int [] array = { 1,2,3,4 }
foreach( int i in array ) {
print i
}
array = { 1,2,3,4 }
foreach( i in array ) {
print i
}
答案 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也可以在其各种内置数据类型上执行此操作。