1

我真的需要使用类似于Single方法的东西,它:

返回序列的唯一元素,如果序列中不完全有一个元素,则抛出异常。

显然,为了方便起见,我可以添加扩展/改进。

但是类似的东西已经存在了吗?也许在 ActiveSupport 或其他库中?

4

1 回答 1

2

不,标准库中没有任何内容(我相信也没有 ActiveSupport),但很容易实现。

module EnumeratorWithSingle
  class TooManyValuesException < StandardError; end
  class NotEnoughValuesException < StandardError; end

  refine Enumerator do
    def single
      val = self.next
      begin
        self.next
        raise TooManyValuesException
      rescue StopIteration
        val
      end
    rescue StopIteration
      raise NotEnoughValuesException
    end
  end
end

module Test
  using EnumeratorWithSingle    
  puts [1].each.single            # 1
  puts [1, 2].each.single         # EnumeratorWithSingle::TooManyValuesException
end
于 2016-08-18T00:47:37.613 回答