首页 文章

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

提问于
浏览
5

在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 arguments ...:\ n 11”#)

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

1 回答

  • 0

    hash-ref中有 failure-result .

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

相关问题