为什么不是名为?的方法/构造函数的第一个参数?

Cla*_*sen 2 language-design objective-c

NSTimer为例.构造时,除第一个(方法名称)之外的所有参数都命名为:

NSTimer *timer =
    [NSTimer
        scheduledTimerWithTimeInterval: seconds
        target: self
        selector: @selector(timerTick:)
        userInfo: nil
        repeats: repeats
    ];
Run Code Online (Sandbox Code Playgroud)

为什么第一个参数没有命名?即

NSTimer *timer =
    [NSTimer scheduledTimerWithTimeInterval
        interval: seconds
        target: self
        selector: @selector(timerTick:)
        userInfo: nil
        repeats: repeats
    ];
Run Code Online (Sandbox Code Playgroud)

这背后是否有一些语言设计决策?它提供了一些我在这里看不到的灵活性吗?

rma*_*ddy 5

我认为正确命名的Objective-C方法实际上确实命名了第一个参数.在您给出的示例中,第一个参数的名称为TimeInterval基本方法名称scheduledTimerWith.

请记住,该方法实际上可以定义为:

+ (NSTimer *)scheduledTimer:(NSTimeInterval)seconds
                           :(id)target
                           :(SEL)aSelector
                           :(id)userInfo
                           :(BOOL)repeats
Run Code Online (Sandbox Code Playgroud)

给该方法一个名称scheduledTimer:::::.

当然,这是蹩脚和不可读的,因此每个参数都有一个名称,我们最终scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:得到第一个参数的命名位置TimeInterval.

  • 重要的是要注意方法名称是_not_` scheduledTimerWithTimeInterval`.方法名称是`scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:`.它们不像其他语言那样命名参数,它们只是方法名称的一部分. (2认同)