您的示例演示了 动态
键入,而不是弱类型。动态类型化通常意味着对象可以存储的数据类型是可变的。任何目标都可以绑定到任何种类的对象。可以将它与静态类型为[*]的C#进行对比。
int i = 5; // Okay.i = "5"; // Illegal! i can only hold integers.
强类型化意味着一旦分配了特定种类的值,对象就应遵循严格的规则,即它们如何与各种类型的其他对象进行交互。弱打字意味着这些规则更加宽松。这并不意味着强类型语言必须在任何方面都具有优势。这只是一种语言设计选择。
Python被认为是强类型的,因为对象对它们的类型有不同的概念。对象之间不兼容的 *** 作会导致错误:
>>> 1 + 1 # Add two integers.2>>> "1" + "1" # Concatenate two strings.'11'>>> 1 + int("1") # Add two integers.2>>> "1" + str(1) # Concatenate two strings.'11'>>> 1 + "1" # Undefined! Adding integers and strings is meaningless.Traceback (most recent call last): File "", line 5, in ?TypeError: unsupported operand type(s) for +: 'int' and 'str'
但是在PHP中,规则对可接受的内容要宽松得多。因此,它被认为比某些其他语言更弱类型。
$x = 1 + "1"; // x is 2
[*]从技术上讲,从C#4开始,由于使用了
dynamic关键字,C#是静态类型的,但是在每个绑定的基础上可以选择启用动态类型。如今,许多语言都在增加动态功能并模糊了界限,因此越来越难说“语言X是动态的”和“语言Y是静态的”。它不是二进制属性,而是更多的是滑动标度或频谱。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)