From c11ec1f137eb4498818516ab408edb3cfae8317e Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Tue, 16 Jul 2013 03:32:03 -0400 Subject: Improve `with-handlers' an exceptions description. --- racket.html.markdown | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'racket.html.markdown') diff --git a/racket.html.markdown b/racket.html.markdown index d3403ff8..4b34fbef 100644 --- a/racket.html.markdown +++ b/racket.html.markdown @@ -375,12 +375,17 @@ m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- no `d' ;;; Exceptions -;; To catch an exception, use the `with-handlers' form -;; To throw an exception use `raise' -(with-handlers - ([(lambda (v) (equal? v "infinity")) - (lambda (exn) +inf.0)]) - (raise "infinity")) +;; To catch exceptions, use the `with-handlers' form +(with-handlers ([exn:fail? (lambda (exn) 999)]) + (+ 1 "2")) ; => 999 +(with-handlers ([exn:break? (lambda (exn) "no time")]) + (sleep 3) + "phew") ; => "phew", but if you break it => "no time" + +;; Use `raise' to throw exceptions or any other value +(with-handlers ([number? ; catch numeric values raised + identity]) ; return them as plain values + (+ 1 (raise 2))) ; => 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 6. Mutation -- cgit v1.2.3