我真的需要使用类似于Single方法的东西,它:
返回序列的唯一元素,如果序列中不完全有一个元素,则抛出异常。
显然,为了方便起见,我可以添加扩展/改进。
但是类似的东西已经存在了吗?也许在 ActiveSupport 或其他库中?
我真的需要使用类似于Single方法的东西,它:
返回序列的唯一元素,如果序列中不完全有一个元素,则抛出异常。
显然,为了方便起见,我可以添加扩展/改进。
但是类似的东西已经存在了吗?也许在 ActiveSupport 或其他库中?
不,标准库中没有任何内容(我相信也没有 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