为什么Objective-C不支持方法重载?

11

Objective-C不支持方法重载。
为什么?
是因为苹果决定不实现它而可行吗?还是由于Objective-C的动态特性而不可行?

我有这样的印象,即可以在编译语言(Java、C#)中进行方法重载,但不能在解释语言(Ruby、Python)中进行方法重载。
这个说法正确吗?

1个回答

27

这里的区别不在于编译语言和解释语言,而在于静态类型语言(Java、C#)和动态类型语言(Ruby、Python、Objective-C)之间的区别。在动态类型语言中,类型信息往往直到运行时才能确定。在Objective-C中,所有对象在运行时都是以id的静态类型。

此外,在动态类型面向对象语言中,一项核心思想是,只要对象能够响应您想要发送的消息,您就不必关心对象的类型。因此,基于类型的重载将与此背道而驰。


1
假设有一个动态类型语言支持方法重载,这种情况是否可能存在?现在是否已经有这样的语言了? - Chiron
1
理论上?当然可以;如果你想这么做的话,甚至可以在现有的编码标准完全不同的情况下,基于Objective-C来完成。实际上,这甚至并不会很难(无论怎样,“难”是一个相对的概念)。 - bbum
很抱歉,Chuck,我不明白你的回答。你能否请解释一下你想说什么。 - Nitish
3
@Nitish: 我不确定如何比我在这里所说的更清楚了。 方法重载指的是具有相同名称但不同类型的多个不同方法。Objective-C不需要提前知道类型(很多时候也不会知道),而是依靠对象在使用它们的地方响应正确的消息。这在哲学上与方法重载不兼容。Objective-C只是用一种不同的方式实现了它。 - Chuck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接