我知道Guile有一个scm_assert_smob_type
函数,但我不相信它会返回一个布尔值。
我希望能够做到这样的事情:
if (type(smob) == int_smob)
{
int_foo(smob);
}
else if (type(smob) == string_smob)
{
string_foo(smob);
}
答案 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>
中定义。