在学习C#的时候发现很奇怪,动态类型的Python会在下面的代码中报错:
i = 5
print i + " "
而静态类型的 C# 通常会执行类似的代码:
int i = 5;
Console.Write(i + " ");
我希望有其他方法(在 python 中我可以在没有任何转换的情况下执行此操作,但 C# 会要求我将 int 转换为字符串或将字符串转换为 int)。
只是强调一下,我不是在问哪种语言更好,我很好奇以这种方式实现语言的背后原因是什么。
最佳答案
你是对的,这里有些奇怪。奇怪的是 +
在任何一种语言中都表示字符串连接! +
是否可以将一个 int 连接到一个字符串上,与 +
根本意味着“连接”的奇怪之处相比,这只是一个小问题。
我不知道是哪种语言首先允许使用 +
来表示字符串连接,但这种错误特征已经一次又一次地重复出现,以至于现在我们通常甚至没有注意到它有多真实奇怪的是。让我们列出正常加法的一些属性,看看字符串是否符合标准。
- 加法是可交换的,但字符串连接不是。 x + y != y + x
- 加法是关联的,但 C# 中的字符串连接不是。如果 y 和 z 是整数,(x + y) + z 不必等于 x + (y + z)。
- 加法与逆运算减法配对,具有如果 x + y 是 z 则 z - y 是 x 的属性。字符串没有这样的操作。
- 加法有左右标识,字符串连接也是。 (空字符串)。
四分之一都不好。字符串连接与加法非常不同,所以它们为什么要共用一个运算符?
我不常这么说,但 C 说对了。字符串连接运算符应该就是:连接。在 C 中,"X""Y"
表示 "XY"
。如果将两个字符串文字并排放置,它们会连接成第三个。
关于c# - 为什么 "int + string"在静态类型的 C# 中可能,但在动态类型的 Python 中却不行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19552571/