Racket哈希表默认失败的结果无益

Mat*_*t G 5 racket

在Racket中,如果您尝试hash-ref使用哈希不包含的密钥,例如

(define a-hash #hash((1 . "a")
                     (2 . "b")))
(hash-ref a-hash 3)
Run Code Online (Sandbox Code Playgroud)

提出exn:fail:contract来了.

...\Racket\collect\racket\private\more-scheme.rkt:263:2:hash-ref:找不到密钥的值

不幸的是,exn:fail:contract无益广泛.如果您尝试将值应用为过程,则会获得相同类型的异常

(with-handlers ((exn:fail? print))
  (10 11))
Run Code Online (Sandbox Code Playgroud)

(exn:fail:contract"application:not a procedure; \n期望一个可以应用于参数的过程\n给定:10 \n参数......:\n 11"#)

有没有办法改变的默认值hash-reffailure-result使用它的代码么?我可以进入我的Racket安装并在那里进行更改吗?这看起来很糟糕和危险.我有什么选择?我可以解析异常消息,但是那些hacky和容易出错的东西.

KIM*_*oon 1

hash-reffailure-result中有。

(define a-hash #hash((1 . "a")
                     (2 . "b")))
(hash-ref a-hash 3 #f) ; => #f
Run Code Online (Sandbox Code Playgroud)