c# - 为什么 "int + string"在静态类型的 C# 中可能,但在动态类型的 Python 中却不行?

标签 c# python types

在学习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/

相关文章:

python - matplotlib设置字体计算机现代和粗体

sql - 避免在 CASE 语句中进行 PostgreSQL 类型评估

javascript - 流量覆盖分数有什么用处?

function - 是否可以在运行时在 SBCL/Common Lisp 中检查/获取函数类型或其签名?

c# - C#线程对象生存期

c# - 创建一个返回对象的表达式

c# - 有没有办法删除此代码中的重复项

python - 在 python pandas 中将日期时间字段格式化为 MON-YYYY 并忽略空值

python - Lasagne mlp 目标越界

c# - callBack 方法是在赋值前调用的还是赋值后调用的?