ruby – 识别独特的块

我有一个数组,我不断在不同的时间点添加代码块.当特定事件发生时,迭代器遍历此数组并一个接一个地生成块.

其中许多块都是相同的,我想避免执行重复的块.

这是示例代码:

    @after_event_hooks = []

    def add_after_event_hook(&block)
      @after_event_hooks << block
    end

@ after_event_hooks.uniq或@after_event_hooks | = block之类的东西不起作用.

有没有办法比较块或检查它们的唯一性?

最佳答案 不能检查块的唯一性,因为这将意味着检查它们是否代表相同的功能,这是不可能的并且已经在计算机科学中研究了很长时间.

您可以使用类似于“Ruby block to string instead of executing”中讨论的函数,该函数采用块并返回块中代码的字符串表示形式,并比较您收到的字符串的输出.

我不确定这是否足够快,值得比较它们,而不是多次执行它们.这也有你需要确保代码完全相同的缺点,即使一个具有不同名称的变量也会破坏它.

点赞