强烈(非常)类型的语言

时间:2011-02-17 07:14:20

标签: programming-languages

如果你将一个参数传递给一个不完全匹配的fnc(但有一个简单或用户定义的转换为所需类型),是否有人会告诉我是否有禁止(不会编译)的语言。例如,如果你有:

void f(int value);
//and in code you passing:
bool a = false;
f(a);

这是严格的理论问答。

1 个答案:

答案 0 :(得分:2)

这是一个模糊的问题,但都是一样的:Haskell,OCaml等都有这种行为。如果一个函数需要一个Int - 它必须被赋予一个Int。您可能能够编写强制Ints到Bools的函数,但这不会改变任何内容,即您仍然会遇到类型错误。当然,Haskell和OCaml的语言类型系统要求更高,证明义务更复杂。

Scala是一种有趣的语言,如果用户定义了从一种类型到另一种类型的强制,并且它是非模糊的,编译器将为您插入它。例如,有时人们使用它来强制数据类型如(Int,(Int,Int))到((Int,Int)Int),这是很方便的。