报错函数

我们还可以利用字符串添加报错函数。 该函数将用户提供的字符串作为输入,并将其提供给lval_err作为报错信息。

  1. lval* builtin_error(lenv* e, lval* a) {
  2. LASSERT_NUM("error", a, 1);
  3. LASSERT_TYPE("error", a, 0, LVAL_STR);
  4. /* Construct Error from first argument */
  5. lval* err = lval_err(a->cell[0]->str);
  6. /* Delete arguments and return */
  7. lval_del(a);
  8. return err;
  9. }

最后一步是将以上函数注册为内置函数。 现在我们终于可以开始构建函数库并将其写入文件中。

  1. /* String Functions */
  2. lenv_add_builtin(e, "load", builtin_load);
  3. lenv_add_builtin(e, "error", builtin_error);
  4. lenv_add_builtin(e, "print", builtin_print);
  1. lispy> print "Hello World!"
  2. "Hello World!"
  3. ()
  4. lispy> error "This is an error"
  5. Error: This is an error
  6. lispy> load "hello.lspy"
  7. "Hello World!"
  8. ()
  9. lispy>