假设我想定义一个"NumberLoader",它将根据需要从另一个地方加载整数,所以我可以给它一个类型:
type NumberLoader = Stream[Integer]
但是它可能会在加载时抛出错误(例如,它通过网络从另一台计算机加载整数),所以类型中应该有一些NetworkError
。
最后,我将它定义为:
type NumberLoader = Stream[Either[NetworkError, Integer]]
这似乎有效,但我觉得有点奇怪。这是一个好主意吗?
您想要表示
a Stream of something which can be either a NetworkError or an Integer
Stream[ Either[ NetworkError, Integer]]
让字体看起来更合适。
您可以选择使用Future
或Try
来代替Either
,但是您将失去指定您期望的异常类型的灵活性,因为Future
和Try
失败都包含通用的Throwable
。