Scala Intellij - Op-Rabbit 语法突出显示问题
Scala Intellij - Op-Rabbit Syntax highlighting issue
我正在尝试使用 op-rabbit https://github.com/SpinGo/op-rabbit to connect my Scala App to RabbitMq. The example code https://github.com/SpinGo/op-rabbit/blob/master/demo/src/main/scala/demo/Main.scala 工作得很好。
我想用 Intellij-idea 来处理它。 IDE 使消费代码出现问题:
channel(qos=3) {
consume(demoQueue) {
body(as[Data]) { data =>
println(s"received ${data}")
ack
}
}
}
我收到数据错误 => ...它说它的类型不匹配
Type mismatch, expected: ::[Data, HNil] => op_rabbit.Handler, actual: Data => op_rabbit.Handler
如果这解决了我试图从 shapeless 中将数据注释为 HList 的问题,我完全可以手动注释数据变量。
channel(qos=3) {
consume(demoQueue) {
body(as[Data]) { data: HList =>
println(s"received ${data}")
ack
}
}
}
IDE 对此很满意...不幸的是编译器不是真的 :D :( 。像这样,代码不再编译了。
有什么想法吗?
Intellij 和 Scala 插件已更新到最新版本。
嗯,如果 IDE 抱怨而不是编译器抱怨会更好。
data
的类型是 Data
而不是 HList
或 Data :: HNil
channel(qos=3) {
consume(demoQueue) {
body(as[Data]) { (data: Data) =>
println(s"received ${data}")
ack
}
}
}
您应该习惯于 IDE 在 Scala 中有时会错误地突出显示代码。依赖于路径的类型、隐式、宏等有时太复杂 IDE 无法处理。
以下代码在 2017.3 EAP(终极版)Build #IU-173.3302.5 中正确突出显示
val directive = body(as[Data])
channel(qos = 3)(
consume(demoQueue)(
directive(data => {
println(s"received ${data}")
ack
})
)
)
作为短期解决方案,我采用了这种方式:
val handle = (data: Data) => {
println(s"received ${data}")
ack
}
val demoQueue = Queue("demo", durable = false, autoDelete = true)
val subscription = Subscription.run(rabbitControl) {
channel(qos=3) {
consume(demoQueue) /*_*/ {
body(as[Data]) {handle}
}
}
}
我在有问题的块上禁用了类型检查。不过我想在我的处理代码中进行类型检查。我将该部分移到了句柄函数中。这样 IDE 检查句柄函数。使用 /* _ */ 可以禁用代码特定部分的类型检查。
还是希望有更好的解决办法。
我正在尝试使用 op-rabbit https://github.com/SpinGo/op-rabbit to connect my Scala App to RabbitMq. The example code https://github.com/SpinGo/op-rabbit/blob/master/demo/src/main/scala/demo/Main.scala 工作得很好。
我想用 Intellij-idea 来处理它。 IDE 使消费代码出现问题:
channel(qos=3) {
consume(demoQueue) {
body(as[Data]) { data =>
println(s"received ${data}")
ack
}
}
}
我收到数据错误 => ...它说它的类型不匹配
Type mismatch, expected: ::[Data, HNil] => op_rabbit.Handler, actual: Data => op_rabbit.Handler
如果这解决了我试图从 shapeless 中将数据注释为 HList 的问题,我完全可以手动注释数据变量。
channel(qos=3) {
consume(demoQueue) {
body(as[Data]) { data: HList =>
println(s"received ${data}")
ack
}
}
}
IDE 对此很满意...不幸的是编译器不是真的 :D :( 。像这样,代码不再编译了。
有什么想法吗?
Intellij 和 Scala 插件已更新到最新版本。
嗯,如果 IDE 抱怨而不是编译器抱怨会更好。
data
的类型是 Data
而不是 HList
或 Data :: HNil
channel(qos=3) {
consume(demoQueue) {
body(as[Data]) { (data: Data) =>
println(s"received ${data}")
ack
}
}
}
您应该习惯于 IDE 在 Scala 中有时会错误地突出显示代码。依赖于路径的类型、隐式、宏等有时太复杂 IDE 无法处理。
以下代码在 2017.3 EAP(终极版)Build #IU-173.3302.5 中正确突出显示
val directive = body(as[Data])
channel(qos = 3)(
consume(demoQueue)(
directive(data => {
println(s"received ${data}")
ack
})
)
)
作为短期解决方案,我采用了这种方式:
val handle = (data: Data) => {
println(s"received ${data}")
ack
}
val demoQueue = Queue("demo", durable = false, autoDelete = true)
val subscription = Subscription.run(rabbitControl) {
channel(qos=3) {
consume(demoQueue) /*_*/ {
body(as[Data]) {handle}
}
}
}
我在有问题的块上禁用了类型检查。不过我想在我的处理代码中进行类型检查。我将该部分移到了句柄函数中。这样 IDE 检查句柄函数。使用 /* _ */ 可以禁用代码特定部分的类型检查。
还是希望有更好的解决办法。