在Racket中,如果你尝试使用
hash-ref
去获取一个哈希表中不存在的键值,例如:(define a-hash #hash((1 . "a")
(2 . "b")))
(hash-ref a-hash 3)
出现了一个exn:fail:contract
异常。
...\Racket\collects\racket\private\more-scheme.rkt:263:2: hash-ref: 根据键没有找到值
不幸的是,exn:fail:contract
异常的信息非常笼统。这种异常与尝试将一个值作为过程应用时得到的异常相同。
(with-handlers ((exn:fail? print))
(10 11))
(exn:fail:contract "应用程序:不是一个过程;\n期望可以应用于参数的过程\n给定:10\n参数...:\n 11" #)
有没有办法在使用hash-ref
时从外部更改failure-result
的默认值? 我能否进入我的Racket安装并在那里更改它? 这似乎很糟糕和危险。 我有哪些选项? 我可以解析异常消息,但这看起来很hacky且容易出错。
hash-ref
的代码提交一个错误报告。 - stchanghash-ref
允许程序员提供不同的failure-result
的原因。您在看Racket中的特定库吗? - stchanghash-ref
?因为实际上,这似乎是一个情况,_那个_函数并不希望hash-ref
失败——而_那就是_需要更改的地方。否则,我认为你无法像你想象的那样对hash-ref
进行monkey-patch。这只留下了exn msg parse hack idea的选项。 - Greg Hendershott