理解解释动态语言中的类型检测


Understanding type detection in interpreted dynamic Language

Python、Php、JS等动态脚本语言如何知道变量的数据类型?

/* C code */
int a1 = 1;
int b1 = 2;
int c1 = a1 * b1;

在上面的C示例中,编译器知道a和b是整数,有了这个知识,它可以调用函数,该函数将添加两个整数并返回另一个整数

/* JS code */
var a1 = 1;
var b1 = 2;
var c1 = a1 * b1;

在上面的JS代码中,解释器是否从文字或其他方面检测到变量的数据类型,我是新手,请帮帮我?

搜索后
IN PHP

如果将字符串值分配给变量$var,那么$var将变为字符串。如果一个整数值被分配给$var,它就会变成一个整数。

在您的C示例中,comnpiler知道a、b和C是整数,因为它们被声明为int,并且它们将始终(就编译器而言)为int类型并保持int值,因此在编译时,为a+b等表达式生成的代码将简单地调用int安全的加法运算符,因为知道变量具有int值。

Python不允许您声明变量的类型,因此Python所做的是将类型和值保持在一起——它们是不可分割的——因此变量中的值的类型总是已知的。您可以使用type()和isinstance()来检查它。是的,该类型最初是从文字推导出来的,例如1是整数,1.0是浮点,"asd"是字符串。然后,一旦一个值在一个变量中,变量的类型就会在表达式中使用,以允许为例如+调用正确的运算符函数,其中添加int与添加(串联)字符串不同,并且通过计算整个表达式的值和类型来保留中间结果的类型。Python还知道哪些类型可以被强制为相关类型,例如Integer到float,哪些不能。在Python中,当您编写像a+b这样的表达式时,在运行时,解释器代码会查看a和b中的值的类型,并试图找到一个匹配的运算符来调用,如果找不到,则会引发异常。

希望这是有道理的。如果你搜索一下,可能会有更好的解释。