定义lagom服务实现时需要使用scala编译时错误

我一直在使用带有Java的lagom一段时间没有问题,但我正在努力让它与scala一起工作(披露 - 因为我对scala相当新,我可能正在做一些愚蠢的事情) .

我已经定义了一个(非常)最小的lagom服务(下面)不应该导致任何问题,但是我在实现代码中得到了下划线参数的scala编译时错误“ missing parameter type ”,我不明白为什么......我认为scala隐式打字应该做必要但显然我错了 .

有人可以帮忙吗?我可能做了一些愚蠢的事,但对于我的生活,我看不出是什么 .

此致,瑞克

这是我的服务接口(API)定义(在文件MyService-api / MyTestService.scala中):

trait MyTestService extends Service {

def myTest2(cmd: String) : ServiceCall[NotUsed, String] // (abstract) method definition

override final def descriptor = {                       // Service Descriptor
        import Service._
        named("myTest2")                                // service name
        .withCalls {                    
        pathCall("myTest/:cmd", myTest2 _)              // will become the REST URI
        }
        .withAutoAcl(true)
    }
}

这是导致编译器错误的实现定义(在文件MyService-impl / MyTestServiceImpl.scala中):

class MyTestServiceImpl extends MyTestService {
    // this is where the error happens....
    override def myTest2() = ServiceCall { _ => Future.successful("Hi MyTest2 user") }  
                                           ^
                                           ^ 
                                         (here)
}

回答(1)

2 years ago

如果您粘贴确切的错误输出会很好,但问题是您将 myTest2 定义为采用 String 的方法,即 def myTest2(cmd: String) ,但之后您已将其实现为不带参数的方法,即 override def myTest2() . 将其更改为 override def myTest2(cmd: String) ,这将解决您的问题 .

特定错误的原因是're getting is that because you'实际上没有覆盖定义的 myTest2 方法,Scala编译器无法推断 ServiceCall 的类型,你推断出你传递给 ServiceCall 的lambda中参数的类型 .