【发布时间】:2014-06-27 19:00:21
【问题描述】:
我是整个 Scala 场景的新手,但到目前为止我一直很喜欢这个旅程!但是,我遇到了一个问题,还无法理解原因...... 我目前正在使用 Kafka,并试图从一个主题中读取数据并将其传递到其他地方。
问题是:内部 for-comprehension 中的 println 按预期输出底部的行,但内部 for 之外的所有其他 prinln 都被跳过,函数最终什么也不返回(甚至不能发出测试用例中的 getClass !)...可能是什么原因造成的?我真的没办法了……
相关代码:
def tryBatchRead(maxMessages: Int = 100, skipMessageOnError: Boolean = true): List[String] = {
var numMessages = 0L
var list = List[String]()
val iter = if (maxMessages >= 0) stream.slice(0, maxMessages) else stream
for (messageAndTopic <- iter) {
for (m <- messageAndTopic) {
println(m.offset.toString + " --- " + new String(m.message))
list = list ++ List(new String(m.message))
println("DEBUG " + list)
numMessages += 1
}
println("test1")
}
println("test2")
println("FINISH" + list)
connector.shutdown()
println("test3")
list
}
输出:
6 --- {"user":{"id":"4d9e3582-2d35-4600-b070-e4d92e42c534","age":25,"sex":"M","location":"PT"}}
DEBUG List({"user":{"id":"4d9e3582-2d35-4600-b070-e4d92e42c534","age":25,"sex":"M","location":"PT"}})
7 --- test 2
DEBUG List({"user":{"id":"4d9e3582-2d35-4600-b070-e4d92e42c534","age":25,"sex":"M","location":"PT"}}, test 2)
8 --- {"StartSurvey":{"user":{"id":"6a736fdd-79a0-466a-9030-61b5ac3a3a0e","age":25,"sex":"M","location":"PT"}}}
DEBUG List({"user":{"id":"4d9e3582-2d35-4600-b070-e4d92e42c534","age":25,"sex":"M","location":"PT"}}, test 2, {"StartSurvey":{"user":{"id":"6a736fdd-79a0-466a-9030-61b5ac3a3a0e","age":25,"sex":"M","location":"PT"}}})
感谢您的帮助!
【问题讨论】:
-
你的代码里有一个简单的 for 循环,for-comprehension 是一个围绕单子编程风格的语法糖,即
for {...} yield ...构造 -
感谢您的评论。 ;-)
标签: java scala apache-kafka for-comprehension