如何对 SMOB 类型执行条件语句?

How does one perform conditional statments on SMOB types?

我知道 Guile 有一个 scm_assert_smob_type 函数,但我不相信它 returns 是一个布尔值。

我希望能够做类似的事情:

if (type(smob) == int_smob)
{
    int_foo(smob);
}

else if (type(smob) == string_smob)
{
    string_foo(smob);
}

您可以查看 scm_assert_smob_typedefinition 以获得提示:

void
scm_assert_smob_type (scm_t_bits tag, SCM val)
{
  if (!SCM_SMOB_PREDICATE (tag, val))
    scm_wrong_type_arg_msg (NULL, 0, val, scm_smobs[SCM_TC2SMOBNUM(tag)].name);
}

如您所见,它利用 SCM_SMOB_PREDICATE 执行 return 布尔值。该宏供 public 使用并在 <smob.h>.

中定义