推断类型和动态类型

时间:2014-07-06 18:04:49

标签: type-inference dynamic-typing

在编程语言中,推断类型和动态类型之间有什么区别?我知道动态类型但不知道动态类型与推断类型有何不同以及如何?有人可以用一些例子提供解释吗?

3 个答案:

答案 0 :(得分:4)

  • 推断类型=设置ONCE并在编译时。实际上推断的部分只是一个更安全的时间,因为如果编译器可以解决它,你不必输入Typename。

    类型推断通常与静态类型结合使用(与swift一样)(http://en.wikipedia.org/wiki/Type_inference

  • 动态类型=无固定类型 - >类型可以在运行时更改


一个例子:

var i = true; //compiler can infer that i most be of type Bool
i = "asdasdad" //invalid because compiler already inferred i is an int!

等于

var i: Int = true; //compiler can infer that i most be of type Bool
i = "asdasdad" //invalid because compiler already inferred i is an int!

==>如果编译器可以看到类型推断,则可以省去拼写类型

但是如果它是动态的(例如objC)

id i = @YES; //NSNumber
i = @"lalala"; //NSString
i = @[@1] //NSArray

答案 1 :(得分:0)

您可以动态更改数据类型以进行动态输入,但推断输入在使用前不需要显式数据类型声明。

答案 2 :(得分:0)

静态和动态类型告诉您何时检查变量的类型。 静态类型检查会在编译期间检查类型。动态类型检查会在运行时(即时)检查类型

Inferred和Manifest涉及是否必须指定变量的类型。推断意味着该语言将为您检测到它。清单意味着必须指定类型。