大家好,我有这样的问题:
implicit class mapValue[T](f: Future[T]){
def mapValue[T]( f: Future[T] )(implicit ec: ExecutionContext): Future[Try[T]] = {
val prom = Promise[Try[T]]()
f onComplete prom.success
prom.future
}
}
implicit class traverseFilteringErrors[A, B](seq: Seq[A])(f: A => Future[B]){ // >*It says implicit class must have a primary constructor with exactly one argument in first parameter list here
def traverseFilteringErrors[A, B](seq: Seq[A])(f: A => Future[B])(implicit ec: ExecutionContext): Future[Seq[B]] = {
Future.traverse( seq )( f andThen mapValue ) map ( _ collect{ case Success( x ) => x } ) // >and Type mismatch. Required: Future[B] => NotInferredA, found: Future[Nothing] => mapValue[Nothing] here.
}
}
它说:
隐式类必须有一个主构造函数,并且在def traverseFilteringErrors的第一个参数列表中只有一个参数
和
类型不匹配。必填:Future[B] =
我是新来的scala,所以我应该怎么做来解决这个问题?
似乎您正在尝试创建一些扩展方法,但您对语法的工作原理有点困惑。
这个想法是,< code>implicit class将只有一个参数,即您要添加扩展方法的值。但是,你在你的扩展方法的参数中再次复制了那个值,这是没有意义的。< br >您还有其他语法问题,如隐藏泛型参数。
在修复此问题并使用最佳实践(例如使隐式类
也对类进行值)之后,我们有几个语法错误可以轻松修复。
最终结果是这样的:
scala prettyprint-override">import scala.concurrent.{ExecutionContext, Future, Promise}
import scala.util.{Try, Success}
object syntax {
implicit class mapValue[T](private val f: Future[T]) extends AnyVal {
def mapValue(implicit ec: ExecutionContext): Future[Try[T]] = {
val prom = Promise[Try[T]]()
f.onComplete(prom.success)
prom.future
}
}
implicit class traverseFilteringErrors[A](private val seq: Seq[A]) extends AnyVal {
def traverseFilteringErrors[B](f: A => Future[B])(implicit ec: ExecutionContext): Future[Seq[B]] = {
Future
.traverse(seq)(f.andThen(_.mapValue))
.map(_.collect { case Success( x ) => x })
}
}
}
总的来说,看起来你对这门语言有点陌生,在没有理解基础的情况下尝试一些高级的东西;无论如何,希望这有所帮助。
您可以看到此处正在运行的代码。
我创建了这个类。但我得到了这个错误 函数必须有一个明确的参数列表。尝试添加参数列表 我试过的 升级颤振 颤振医生输出
我有一个(相当复杂的)数据类型: 现在我发现自己需要另一个数据类型…有两个构造函数。一个与的相同;另一个只存储一个。我有什么选择? 虽然这会起作用,但它也允许类似这样的东西,这是没有意义的。
问题内容: 为什么Eclipse总是在构造函数上给我错误: 错误是: 类 密集板 类 板 问题答案: 您只需执行此操作即可将值发送到父类。
所以我有这个错误,使用robolectric。
我的问题是关于OOP(C)中的构造函数。当我在一个类中将默认构造函数定义为private,并且在main中将该类的一个对象初始化为default时,就会出现默认构造函数不可访问的错误。这很好。但我也在Public部分中使用默认参数构造函数,当我再次在main中初始化对象时,就会出现对函数重载的不明确调用。所以我的问题是,如果不能从main访问私有构造函数,那么编译器应该调用公共部分中的构造函数,这
如何定义具有多个隐式参数的函数。