gpt4 book ai didi

当给定 nil 参数时要做什么的 Objective-c 约定?

转载 作者:行者123 更新时间:2023-12-04 04:42:30 30 4
gpt4 key购买 nike

在 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);
...

最佳答案

一般来说,如果你的方法要求一个参数不为nil,你最好尽快退出,以防万一。

考虑到这一点

NSParameterAssert(item)

是一个很好的做法。详细解释 here ,但简单的总结是它会抛出 NSInternalInconsistencyException如果断言不满足。

请注意,默认情况下 NSParameterAssert宏(以及所有其他类似 NSAssert 的宏)在发布版本中被删除,除非您取消定义 NS_BLOCK_ASSERTIONS .

更多关于该主题的解释 here .

关于当给定 nil 参数时要做什么的 Objective-c 约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18677273/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com