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

时间:2017-10-10 12:28:01

标签: scala lagom

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

我已经定义了一个(非常)最小的lagom服务(下面),这不应该导致 任何问题,但我得到scala编译时错误" 缺少参数类型 "对于实现中的下划线参数 代码和我不明白为什么....我以为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 个答案:

答案 0 :(得分:2)

如果您粘贴了确切的错误输出会很好,但问题是您将myTest2定义为采用String的方法,即def myTest2(cmd: String),但是您和#39; ve将其实现为不带参数的方法,即override def myTest2()。将其更改为override def myTest2(cmd: String),这样可以解决您的问题。

您遇到的具体错误的原因是因为您实际上没有按照定义覆盖myTest2方法,因此Scala编译器无法推断出{{ServiceCall的类型1}}你意味着要返回,因此无法推断你传递给ServiceCall的lambda中参数的类型。