【发布时间】:2014-08-27 05:41:29
【问题描述】:
在编程语言中,推断类型和动态类型有什么区别?我知道动态类型,但不知道动态类型与推断类型有何不同以及如何?有人可以举例说明一下吗?
【问题讨论】:
标签: type-inference dynamic-typing
在编程语言中,推断类型和动态类型有什么区别?我知道动态类型,但不知道动态类型与推断类型有何不同以及如何?有人可以举例说明一下吗?
【问题讨论】:
标签: type-inference dynamic-typing
推断类型 = 设置 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 Bool!
等于
var i: bool = true; //You say i is of type Bool
i = "asdasdad" //invalid because compiler already knows i is a Bool!
==> 如果编译器可以看到类型,则类型推断可以节省您拼写类型
但如果它是动态的(例如 objC),因为类型仅基于运行时的内容
id i = @YES; //NSNumber
i = @"lalala"; //NSString
i = @[@1] //NSArray
【讨论】:
静态和动态类型会告诉您何时检查变量的类型。 静态类型在编译期间检查类型。动态类型在运行时检查类型(动态)
Inferred 和 Manifest 关注您是否必须指定变量的类型。推断意味着该语言会为您检测到它。 Manifest 表示必须指定类型。
【讨论】:
您可以动态更改数据类型以进行动态类型化,但推断类型在使用前不需要明确的数据类型声明。
【讨论】: