类型不匹配:预期A => NotInferedB,实际是Any

时间:2014-02-23 23:36:07

标签: scala

以下是我的代码,我在问题标题中得到了例外

ActorRef和这里的ask函数都是Akka,但我不知道上面的异常意味着什么。即使是在Google上进行搜索也无法在NotInferedB上产生太大的影响....有人可以解释一下吗?

def exchangeRateLookup(exchangeRateActor: ActorRef): (Option) => Future[Any] = {
        (iv: Option) => iv map (iv => ask(exchangeRateActor, iv.asInstanceOf[IV].getCurrency.getIsoCurrCode)).getOrElse(Future.successful())      
      }

修改

我现在已经更正了我的代码以添加适用的输入,但现在我得到了“缺少参数类型”错误。这是我最新的代码:

(iv: Option[IV]) => iv map (i => ask(exchangeRateActor, i.getCurrency.getIsoCurrCode)).getOrElse(Future.successful[Null](null))

还有其他想法吗?

2 个答案:

答案 0 :(得分:1)

Future.successful [T](结果:T):Future [T]返回已经完成的Future。如果在没有参数的情况下调用它,则编译失败。我建议你先解决这个问题。此外,iv被声明为Option,没有任何类型参数(Option [T])。然后,将其转换为IV,以便从中提取货币。除非IV是在你的类中的其他地方声明的类型,并且保证有一个" getCurrency()"方法,我不知道这是如何工作的。让我们先解决这些问题,看看会发生什么。

答案 1 :(得分:1)

要更正另一个答案,2.11显示单位值插入到这里的parens中:

scala> :se +deprecation

scala> Future.successful()
<console>:51: warning: Adaptation of argument list by inserting () has been deprecated: this is unlikely to be what you want.
        signature: Future.successful[T](result: T): scala.concurrent.Future[T]
  given arguments: <none>
 after adaptation: Future.successful((): Unit)
              Future.successful()
                               ^
res1: scala.concurrent.Future[Unit] = scala.concurrent.impl.Promise$KeptPromise@60dac573

(在2.10上,尝试-Xlint或-Ywarn-adapted-args等。)

如果else部分的类型错误,

Option.getOrElse可以返回更宽的类型。

请参阅puzzler

askFuture[Any]