Programming languages 强(非常)类型语言

Programming languages 强(非常)类型语言,programming-languages,Programming Languages,有没有人能告诉我,如果你将一个参数传递给一个不完全匹配的fnc(但是有一个普通的或用户定义的转换为所需的类型),是否有一种语言会禁止(不会编译)。例如,如果您有: void f(int value); //and in code you passing: bool a = false; f(a); 这是严格的理论问题。这是一个模糊的问题,但都是一样的:Haskell、OCaml等都有这种行为。如果一个函数需要一个Int,则必须给它一个Int。您可能可以编写将Int强制为Bools的函数,但这不

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

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

这是严格的理论问题。

这是一个模糊的问题,但都是一样的:Haskell、OCaml等都有这种行为。如果一个函数需要一个Int,则必须给它一个Int。您可能可以编写将Int强制为Bools的函数,但这不会改变任何东西,即您仍然会得到一个类型错误。当然,有些语言的类型系统要求更高,证明义务也更复杂,这与Haskell和OCaml不同


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

这在C#、Java、Haskell中是非法的……那么,您希望它接受还是拒绝您显示的代码片段?谢谢您的回答。我想你的意思可能是匡威而不是强制?@这里:“类型转换”、“类型转换”和“强制”在这个上下文中几乎是同义词。@delnan(在书中)从未遇到过有人会说用户定义强制。从未。如果你能引用一些书(或论文),我将不胜感激。@There:请看的第一句。@delnan+1谢谢,我每天都学到新东西。我希望到最后。