在 Objective-c 中,nil 预计会传播而不是导致立即失败。向 nil 发送消息(基本上)总是导致 nil。在发送 nil 参数时是否有类似的期望,而这没有意义?
我想到的特殊情况本质上是函数map
方法:
-(NSArray*) map:(id (^)(id item))projection {
if (projection == nil) {
// ?? what to do ??
// throw exception?
// return nil?
// return empty array?
}
NSMutableArray* r = [NSMutableArray arrayWithCapacity:[self count]];
for (id e in self) {
[r addObject:projection(e)];
}
return r;
}
是否应该传递一个 nil 块进行投影会导致某种失败或某种默认结果?
我个人的偏好是快速失败,但我看到 Objective-C 在很多地方都倾向于不做任何事情。在这种情况下,我将不胜感激有关预期约定的输入。
编辑
更具体地说,这样做是否可以接受:
#define require(expr) \
if (!(expr)) \
@throw([NSException exceptionWithName:NSInvalidArgumentException \
reason:[NSString stringWithFormat:@"!require(%@)", (@#expr)] \
userInfo:nil])
-(NSArray*) map:(id (^)(id item))projection {
require(projection != nil);
...