Scala &引用;实现限制:值类中不允许嵌套类。计划在后续版本中删除此限制。”;
方法说明: 给定期货列表Scala &引用;实现限制:值类中不允许嵌套类。计划在后续版本中删除此限制。”;,scala,Scala,方法说明: 给定期货列表fs,返回持有期货列表的期货 fs中所有期货的值。返回的未来已经完成 只有在fs中的所有期货交易完成后。价值观 在列表中,与相应的期货的顺序相同fs。如果 任何期货fs失败,产生的期货也会失败 这就是我所做的: implicit class FutureCompanionOps[T](val f: Future.type) extends AnyVal { /*** //Some others method ***/ def all[T
fs
,返回持有期货列表的期货
fs
中所有期货的值。返回的未来已经完成
只有在fs
中的所有期货交易完成后。价值观
在列表中,与相应的期货的顺序相同fs
。如果
任何期货fs
失败,产生的期货也会失败
这就是我所做的:
implicit class FutureCompanionOps[T](val f: Future.type) extends AnyVal {
/***
//Some others method
***/
def all[T](fs: List[Future[T]]): Future[List[T]] = async {
var fsVar = fs;
val l = List()
while(fsVar.nonEmpty){
await{fsVar.head} :: l
fsVar = fsVar.tail
}
l
}
}
但是我在这一行中得到了以下编译错误defall[T](fs:List[Future[T]]):Future[List[T]=async{
:
实现限制:值类中不允许嵌套类
计划在后续版本中删除此限制
有人能解释一下这个错误并告诉我解决方法吗?来自常见问题解答:
Scala异步特性即将推出第一个版本,并且部分是实验性的
作为在值类中使用Scala异步的解决方案,请考虑使用以下技巧:在值类之外移动异步调用:
class FutureOps[T](f: Future[T]) extends AnyVal {
def foo: Future[T] = fooImpl(f)
}
def fooImpl(f: Future[T]) = async {
val x = await { f }
throw new Exception
}
如果该代码或其他代码杂凑和重构不能解决问题,考虑使用正则函数组合器,如<代码> MAP<代码> >代码>平面图,<代码>继续> < /代码>及其其他朋友。
< P>此问题可以通过移动值类之外的方法(FutuxPosiRoops)来解决。 即使没有进一步解释这里发生了什么,只是该功能是实验性的。异步{}会导致一个宏,从那里很难理解,因此…可能在某个地方创建了一个嵌套类,而这在值类中是不允许的还建议您从现在起不要使用异步{}和等待{}
注意:你的代码不起作用,但我不应该破坏它的乐趣,因为问题不在于此至少可以说,实现过程充满了惊喜!!“现在也建议你不要使用async{}和Wait{}。你这是什么意思?在语言中还是在课程中?@nicolas我认为因为async{}和Wait{}都是静态的糖类,并且都可以通过承诺实现(目前编译器似乎更稳定)。
def allOutside[T](fs: List[Future[T]]): Future[List[T]] = async {
var fsVar = fs;
val l = Nil
while(fsVar.nonEmpty){
await{fsVar.head} :: l
fsVar = fsVar.tail
}
l.toList
}
implicit class FutureCompanionOps[T](val f: Future.type) extends AnyVal {
/***
//Some others method
***/
def all[T](fs: List[Future[T]]): Future[List[T]] = allOutside(fs)
}