小编Jul*_*pek的帖子

为什么OCaml使用异常而不是用求和类型表示错误?

我已经阅读了/sf/answers/851336251/,它在性能方面解决了OCaml异常,并提到有人可能会使用异常来故意操纵控制流。

但是,我想从语言设计/历史角度了解为具有一流的Sum Types的语言添加例外的背后原理。

我的理解(如果我弄错了,请纠正我)是,OCaml中的异常会破坏类型系统,从而使推理程序的特定状态变得更加困难。与对总和类型进行匹配不同,编译器将不会检查是否处理了所有可能的错误情况,尤其是如果对库函数的修改引入了新的错误状态时,这可能会成为问题。例如,这就是为什么Zig编程语言强制执行错误处理并提供用于检查所有可能的错误情况的编译器强制构造(https://ziglang.org/#A-fresh-take-on-error-handling)。

鉴于以上所述,并且考虑到可能存在绕过多个堆栈框架的情况,我可以想象一个不同的语言构造(也许类似于标记中断),其角色与错误处理没有语义关联。 。

是否有(很多?)情况下处理错误的异常优于显式的,经过编译器检查的错误处理?

我尤其不理解Hashtbl.find抛出异常之类的东西。鉴于Hashtbl.find_opt几年前已经引入的方法,这是否表示在不破坏现有程序的情况下向标准库设计方向的某种转变?

OCaml和标准库中的异常是否是设计OCaml时的产物(例如,当时流行的异常/未完全理解其后果),和/或该语言是否有理由存在异常?

ocaml language-design

7
推荐指数
2
解决办法
175
查看次数

沙盒coreWLAN?

我正在编写一个OS X应用程序,它取决于确定无线信号强度的能力,但我无法弄清楚用于沙箱的权利.

每当我使用

NSMutableArray *scanResults;
CWInterface *currentInterface = [CWInterface interface];
NSLog(@"currInterface: %@\n", currentInterface);
NSMutableDictionary *signalsDict = [[NSMutableDictionary alloc] init];
    NSError *err = nil;
    scanResults = [NSMutableSet setWithSet:[currentInterface scanForNetworksWithSSID:nil error:&err]];
Run Code Online (Sandbox Code Playgroud)

The operation couldn't be completed. (com.apple.coreWLAN.error error 1.)尽管在XCode中检查了所有权利,但我收到了错误.我遗失了哪些权利?

CoreWLANWirelessManager示例项目具有相同的问题.

objective-c corewlan osx-mountain-lion

5
推荐指数
1
解决办法
1450
查看次数