On this page:
1.1 常用函数
option/  map
option/  unwrap-exn
option/  unwrap-error
option/  unwrap
1.2 do?语法糖
do?
9.0

1 option🔗ℹ

Option代表为空的类型。

跟Rust等支持和类型不一样,Option仅仅是一个联合别名:(define-type (a) (U #f a))

也就是说,它不支持嵌套:

(:type (Option (Option Real)))

结果:

(U False Real) [can expand further: Real]

1.1 常用函数🔗ℹ

procedure

(option/map ma f)  (Option b)

  ma : (Option a)
  f : (-> a b)
类似Result::map和Result::chain,因为Option不可嵌套, 所以a既可以是非空任意值,也可以是任意的(Option a)

procedure

(option/unwrap-exn ma err)  a

  ma : (Option a)
  err : exn
强行解构(Option a)a

如果ma#f,会抛出用户指定的exn——也就是err参数。

procedure

(option/unwrap-error ma err-msg)  a

  ma : (Option a)
  err-msg : String
类似option/unwrap-exn,自定义错误从exn变成String

#f抛出exn:fail:user

procedure

(option/unwrap ma)  a

  ma : (Option a)
类似于Rust的Option::unwrap,遇到#f直接抛出exn:fail:user

1.2 do?语法糖🔗ℹ

类似于Haskell的do记法。

syntax

(do? do语句 ...)

 
do语句 = 
  | 绑定语句
  | 赋值语句
     
赋值语句 = (define datum ...)
     
绑定语句 = (identifer <- datum)
do?会对每条do语句检查,如果该语句返回#f, 那么整条语句就会退出,同样只返回#f。 可以把do?看成一个巨大的and,并且它允许对中间值进行绑定,即绑定语句

(do? (a <- #f)
     (define b : Real 2)
     (+ b a))