Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala &引用;实现限制:值类中不允许嵌套类。计划在后续版本中删除此限制。”;_Scala - Fatal编程技术网

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)
}