我是一个漂亮的初级开发人员(第一年CS学生),我一直在学习静态类型语言和动态类型语言之间的差异。纠正我,如果我错了,但我的理解是,动态类型语言允许程序员初始化变量而不给它一个类型,然后在程序中稍后给这个变量类型。只是为了好奇,是否有任何语言允许您在不初始化全新变量的情况下更改对象的类型/类别?是否有一种语言可以改变变量类型?
回答
我认为你要找的是weak typing。请注意,弱打字与强打字不同于静态打字与动态打字。
这一切都取决于你所说的一个全新的变量。例如,在PHP中:
<?php
$var = NULL; // $var is now of type null
$var = 1; // $var is now of type integer
?>
等等。但是,不能保证先前用于存储NULL值的空间现在用于存储1,因此您可以说您只是为自己创建了一个具有相同名称的全新变量。
它取决于你如何定义类型,但JavasScript没有“类”,并允许你轻松地将接口改变为对象。
我不知道有一个强大的面向对象的基础上,允许你这样做的任何一种语言:
typeof dog // Dog
dog.turnIntoCat()
typeof dog // Cat
但是几乎所有的OO语言都支持类似:
typeof dog // Dog
cat = dog.turnIntoCat()
typeof cat // Cat
我认为所有动态类型的语言(至少我所知道的所有)允许这样:
typeof dog // Dog
dog = new Cat()
typeof dog // Cat
There ar e静态/动态类型和强/弱类型的定义很多,所以很难具体回答任何一般性问题。这就是说,我使用的(非常高的)定义倾向于相当好地传达总体思路(至少,我认为是这样)。
静态类型vs动态类型
静态类型语言适用类型变量。变量count
可以被定义为一个整数。它只能保存整数值。
动态类型语言将值的类型应用于值,但不包含变量。值123是一个整数,“abc”是一个字符串,但变量result
可以在不同的时间点分配给一个或两个。
强VS弱类型
在一个强类型语言,一个值都有一个类型,它是唯一的那种类型。例如,"123"
是一个字符串,其中123
是一个整数。您不能将字符串视为整数,反之亦然。你可以在它们之间进行转换(即“123”.toint()等),但是你不能只把一种类型看作另一种类型(即。以下将无效:“123”+ 456 == 579)
在弱类型语言中,值只是一个值,您可以根据它的用途将其视为各种类型。例如,你可以说"123" + 234
并得到一个有用的结果(357或123234取决于语言)。
在静态和动态之间,以及强弱之间存在很多灰色区域,但上面的定义给出了一个总体思路。
关于相关话题,还有显式和隐式类型(程序员指定类型和编译器数字类型),这是一个非常有趣的话题。
- 1. 使用一个隐含类型种姓是否改变变量的类型?
- 2. 有没有办法改变这种语言的变量值?
- 3. 是否有一个变量可以存储相同类型的其他变量?
- 4. 变量类型本身是变量的语言?
- 5. 类变量是否可变?
- 6. 是否可以在运行时更改AngularJS变量的类型?
- 7. 是否可以在html中检索语言标记变量?
- 8. 是否可以对一个const变量进行类型转换?
- 9. 是否可以修改$ _SESSION变量?
- 10. PowerShell是一种强类型语言吗?
- 11. 环境变量语言是否具体?
- 12. 使用会话变量处理2种语言可以吗?
- 13. 超类型变量是否可以引用子类对象?
- 14. 将类型赋值给变量 - 'A'是一种类型,但用作'变量'?
- 15. 状态monad是否需要/有用可变(本地)变量(如Scala)的语言?
- 16. 是否有一个Eclipse插件可以执行从一种语言到另一种语言的评论翻译?
- 17. 改变语言
- 18. 是否可以创建采用任何类型变量的堆栈类?不仅有1种类型
- 19. 哪些类型在Google Go语言中可变且不可变?
- 20. 是否有一种语言具有这种简化的语法?
- 21. LESS变量:是有这种类型可能
- 22. 哪种语言可以在运行时动态改变类成员?
- 23. 是否可以使用类型变量来转换对象的变量?
- 24. 是否有可能在变量中更改变量的值?
- 25. C语言中的可变修改类型
- 26. 是否有用于检查变量类型的快捷语法?
- 27. 以动态类型语言(如Ruby)命名变量
- 28. 混淆是否会改变变量/函数类型
- 29. 什么语言可以连续改变程序音量?
- 30. 是否可以将一种语言的unicode转换为其他语言的unicode?