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

时间:2013-12-04 17:07:49

标签: racket

在Racket中,如果您尝试hash-ref获取散列不包含的密钥,例如

(define a-hash #hash((1 . "a")
                     (2 . "b")))
(hash-ref a-hash 3)

引发exn:fail:contract

  

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

不幸的是,exn:fail:contract无益广泛。如果您尝试将值应用为过程

,则会获得相同类型的异常
(with-handlers ((exn:fail? print))
  (10 11))
  

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

有没有办法在代码外部使用它来更改hash-ref的{​​{1}}的默认值?我可以进入我的Racket安装并在那里进行更改吗?这看起来很糟糕和危险。我有什么选择?我可以解析异常消息,但是这种恶作剧容易出错。

1 个答案:

答案 0 :(得分:0)

hash-ref中有failure-result

(define a-hash #hash((1 . "a")
                     (2 . "b")))
(hash-ref a-hash 3 #f) ; => #f