【问题标题】:How does one perform conditional statments on SMOB types?如何对 SMOB 类型执行条件语句?
【发布时间】: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);
}

【问题讨论】:

    标签: c guile


    【解决方案1】:

    您可以查看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,它确实返回了一个布尔值。该宏供公众使用,定义在<smob.h>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      相关资源
      最近更新 更多