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

时间:2016-07-01 23:32:33

标签: c guile

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

我希望能够做到这样的事情:

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

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

1 个答案:

答案 0 :(得分:1)

您可以查看scm_assert_smob_type definition的提示:

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确实返回一个布尔值。该宏供公众使用,并在<smob.h>中定义。