如何对 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_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
执行 return 布尔值。该宏供 public 使用并在 <smob.h>
.
中定义
我知道 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_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
执行 return 布尔值。该宏供 public 使用并在 <smob.h>
.