【发布时间】:2016-11-04 10:23:50
【问题描述】:
我知道 Guile 有一个 scm_assert_smob_type 函数,但我不相信它会返回布尔值。
我希望能够做类似的事情:
if (type(smob) == int_smob)
{
int_foo(smob);
}
else if (type(smob) == string_smob)
{
string_foo(smob);
}
【问题讨论】:
我知道 Guile 有一个 scm_assert_smob_type 函数,但我不相信它会返回布尔值。
我希望能够做类似的事情:
if (type(smob) == int_smob)
{
int_foo(smob);
}
else if (type(smob) == string_smob)
{
string_foo(smob);
}
【问题讨论】:
您可以查看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>。
【讨论】: