【问题标题】:How should a fail-fast iterator fail in CC 中的快速失败迭代器应该如何失败
【发布时间】:2013-12-03 11:22:31
【问题描述】:

我想在 C 中实现一个快速失败的迭代器,即如果列表应该失败 在迭代时被修改。

失败的位置肯定在 hasNext 和 next 方法中,我将在其中检查自迭代器创建以来的修改次数。所以我想我知道它什么时候应该失败,但我不知道它应该如何失败。

我考虑过 assert() 但它仅用于调试,可以吗?以及如何进行单元测试? 我最关心的是找到一种方法来对这个功能进行单元测试。

// List Methods
List* List_new(void);
void List_delete(List** self);
int List_add(List* self, void* data);
size_t List_size(List* self);
void* List_head(List* self);
int List_removeHead(List* self);
ListIterator* iterator(List* self);

// ListIterator Methods
bool ListIterator_hasNext(ListIterator* self);
void* ListIterator_next(ListIterator* self);

【问题讨论】:

    标签: c design-patterns iterator


    【解决方案1】:

    这取决于您希望程序在这种情况下做什么(或能够做什么)。

    断言可能不好,因为它会杀死程序,我怀疑这是否合适。

    您可以将大部分返回值移动到输出参数中,然后返回一个布尔值来指示操作是否有效,然后您可以在单元测试中对其进行断言。

    【讨论】:

    • 太棒了!我会试试这个,到处放很多“const”,以明确什么是输入,什么是输出。
    猜你喜欢
    • 2015-02-25
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2016-07-29
    • 2020-07-31
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多