【问题标题】:Why Objective-C doesn't support method overloading?为什么 Objective-C 不支持方法重载?
【发布时间】:2010-12-14 22:07:23
【问题描述】:

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

我的印象是方法重载可以在编译语言(Java、C#)上完成,而不能在解释性语言(Ruby、Python)上完成。
有些是真的吗?

【问题讨论】:

    标签: objective-c overloading


    【解决方案1】:

    此处相关的区别不是编译语言和解释语言之间的区别,而是静态类型(Java、C#)和动态类型(Ruby、Python、Objective-C)之间的区别。在动态类型语言中,类型信息通常直到运行时才知道。在运行时,Objective-C 中的所有对象都静态类型为id

    此外,动态类型的 OO 语言的核心思想是,只要对象响应您要发送的消息,您就不必关心对象是什么类型。因此,基于类型的重载将与此背道而驰。

    【讨论】:

    • 假设,是否有可能拥有支持方法重载的动态类型语言?现在有这样的语言吗?
    • 假设?当然;如果你想去那里(并且如果你想完全脱离现有的编码标准),它甚至可以在今天的 Objective-C 之上完成。它甚至不会“那么难”(无论如何,对于某些“难”值)。
    • 恐怕查克,我没听懂你的回答。你能解释一下你想说什么吗?
    • @Nitish:我不知道如何说得比这里更清楚。重载一个方法意味着有几个不同的方法具有相同的名称但不同的类型。 Objective-C 不需要提前知道类型(而且通常不会),而是依赖对象来响应使用它们的地方的正确消息。这在哲学上与重载是不相容的。 Objective-C 只是以不同的方式实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    相关资源
    最近更新 更多