【问题标题】:Inferred Type and Dynamic typing推断类型和动态类型
【发布时间】:2014-08-27 05:41:29
【问题描述】:

在编程语言中,推断类型和动态类型有什么区别?我知道动态类型,但不知道动态类型与推断类型有何不同以及如何?有人可以举例说明一下吗?

【问题讨论】:

    标签: type-inference dynamic-typing


    【解决方案1】:
    • 推断类型 = 设置 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
    

    【讨论】:

    • 你是说推断类型 = 静态类型?
    • 是的。如果编译器无论如何都能弄清楚,它只是让你免于输入类型
    • 我没听懂。但是在静态类型中,我们故意提供数据类型。您能否提供一些推断类型的示例?
    • 编辑对您有帮助吗?否则研究我提供的维基百科链接
    【解决方案2】:

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

    Inferred 和 Manifest 关注您是否必须指定变量的类型。推断意味着该语言会为您检测到它。 Manifest 表示必须指定类型。

    【讨论】:

      【解决方案3】:

      您可以动态更改数据类型以进行动态类型化,但推断类型在使用前不需要明确的数据类型声明。

      【讨论】:

        猜你喜欢
        • 2023-02-05
        • 2020-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-28
        相关资源
        最近更新 更多